Java – die neusten Beiträge

JavaFX Button auf Controller Funktion zeigen?

Ich will einen Taschenrechner programmieren. Backend logik ist soweit vorhanden, fehlt nur das GUI

Ich dachte mir, dass ich eine Klasse mache, wo ich das GridPane extende und im Konstruktor die buttons adde.

So sieht das etwa aus:

public class FXPane extends GridPane {
    private String[][] buttonTexts = {
            {"7", "8", "9", "(", ")", "BS"},
            {"4", "5", "6", "+", "-", "CE"},
            {"1", "2", "3", "*", "/", "C"},
            {"±", "0", ",", "x^y", "1/x", "="}
    };

    FXPane() {
        for(int y = 0; y < buttonTexts.length;y++){
            for(int x = 0; x<buttonTexts[0].length;x++){
                Button theButtonToAdd = new Button(buttonTexts[y][x]);
                theButtonToAdd.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);
                this.add(theButtonToAdd,x,y);
            }
        }
    }
}

Der Controller sieht so aus:

public class Controller {
    @FXML
    private Label fxDisplay;
    @FXML
    private GridPane fxGrid;

    private FXPane buttonPane = new FXPane();

    // called by the FXML loader after the labels declared above are injected:
    public void initialize() {
        fxDisplay.setText("asd");
        fxGrid.add(buttonPane,0,0);
    }
}

Die Namen und der Hack über 2 Gridpanes änder ich noch, geht aber derzeit eher POC, da es das erste mal mit JavaFX ist.

Mein Plan ist, dass die Buttons auf eine Funktion aus dem Controller zeigt bzw aufruft.

Nur ist das vermutlich nicht (schön) möglich. Gibts ne bessere Variante oder ist das der einzige Weg?

Der Plan war, dass der Controller die Taschenrechner Instanz besitzt und jeder Button dann die eingabe an die Taschenrechner Instanz gibt. Nur brauche ich dafür halt noch ein übersetzer, damit der jeweilige Button die jeweilige Eingabe in den Taschenrechner gibt.

Ich könnte natürlich die Controller Instanz per this dem Konstruktor übergeben und dann in FXPane speichern. Nur ist das gut?

Computer, Technik, programmieren, Java, JavaFX, Technologie, GUI

ActionListener reagiert auf Knopfdruck ohne Actionevent e?

Hier wird dem Button einen ActionListener mit einem ButtonListener Objekt übergegeben. In der inneren Klasse implementiert ButtonListener vom ActionListener. Es erfolgt aber kein Actionevent e. Warum wird dann der Methodenkörper ausgeführt nach einem Knopfdruck wenn der Knopdruck nicht dem Parameter e hinzugeteilt wurde? Also so if( e.getSource() == this.button).

Ich schätze das hat was mit dem ButtonListener zu tun nur ich verstehe nicht wie. Danke für die Eklärung


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class FightClubFrame extends JFrame {
// Deklaration der Bestandteile
	private JTextField textField;
	private JLabel label;
	private JButton button;
	private JPanel panel;

	public FightClubFrame() {
// Erzeugung der einzelnen Elemente
		button = new JButton(" Talk ");
		button.addActionListener(new ButtonListener());
		label = new JLabel();
		textField = new JTextField();
		panel = new JPanel(new GridLayout(2, 1));
// Festlegung der Eigenschaften des Frames
		setTitle(" Fight Club ");
		setLayout(new BorderLayout());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(300, 150);
// Aufbau der verschachtelten Oberfl¨ache
		panel.add(label);
		panel.add(textField);
		add(panel, BorderLayout.CENTER);
		add(button, BorderLayout.SOUTH);
	}

	class ButtonListener implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			String input = textField.getText();
			if (input.contains("Fight Club")) {
				label.setText("Lets Fight");
			} else {
				label.setText("Dont Fight");
			}
		}
	}

	public static void main(String[] args) {
// Erzeugung einer Instanz des Frames
		FightClubFrame frame = new FightClubFrame();
		frame.setVisible(true);
	}
}
Computer, Java, Informatik, jButton

Fehler wenn ich auf Spigot 1.8.8 Server joine?

Hi. Ich komme nicht auf meinen Spigot 1.8.8 Server. Immer wenn ich versuche zu joinen kommt unendlich lange diese Meldung ganz schnell wiederholt in der Konsole:

[16:25:56 WARN]: An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
java.lang.RuntimeException: Unable to access address of buffer
        at io.netty.channel.epoll.Native.read(Native Method) ~[spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at io.netty.channel.epoll.EpollSocketChannel$EpollSocketUnsafe.doReadBytes(EpollSocketChannel.java:678) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at io.netty.channel.epoll.EpollSocketChannel$EpollSocketUnsafe.epollInReady(EpollSocketChannel.java:714) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at io.netty.channel.epoll.EpollSocketChannel$EpollSocketUnsafe$3.run(EpollSocketChannel.java:755) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:380) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:268) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
        at java.base/java.lang.Thread.run(Thread.java:831) [?:?]

Ich habe kein einziges Plugin auf dem Server und seit dem ersten Start nichts verändert. Und ja ich bin auch gewhitelisted und so...

Server, Computer, Java, Minecraft, Minecraft Server, Bukkit, craftbukkit, Spigot, minecraft 1.8, Spiele und Gaming

Meistgelesene Beiträge zum Thema Java