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
Android Studio App stürzt ab nach klick auf Button?

Hallo,

ich habe eine Android Studio Applikation mit einer Bottom Navigation bar, bei welcher unter dem Reiter "Profile" ein User hinzugefügt werden soll. Wenn ich dort auf "Add User" klick stürzt die App allerdings ab, in der Version ohne Navigationsbar funktioniert das allerdings einwand frei. Vielleicht kann mir jedmand helfen, den Fehler zu finden.

Hier ist die UI von Profile:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout ...
    ...
    <Button
        android:id="@+id/btAddUser"
        ...
        android:text="Add User"
        android:onClick="onAddUser"
        />

</LinearLayout>

Hier die UI der BottomBar:

<?xml version="1.0" encoding="utf-8"?>
<...
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/fragment_container"
        >  
...
 app:menu="@menu/bottom_navigation"/>
    </FrameLayout>

Die Klasse zur BottomBar:

package com.example.bottomnav;
import ...
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

BottomNavigationView bottomNavigation = findViewById(R.id.bottom_navigation);    bottomNavigation.setOnNavigationItemSelectedListener(navListener);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
...
private BottomNavigationView.OnNavigationItemSelectedListener navListener =
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull @NotNull MenuItem item) {
Fragment selectedFragment = null;
switch (item.getItemId())
{
case R.id.nav_projects:
selectedFragment = new ...
ProfileFragment();
break;
}
                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
selectedFragment).commit();
return true;
}};}

Hier der Code zum Profil hinzufügen:

@Nullable
@org.jetbrains.annotations.Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_profile, container, false);
}

public
class MyActivity extends AppCompatActivity {
    ...

    Button btAddUser;
...

    Boolean isAdmin = Boolean.FALSE;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_profile);
       ...
        btAddUser = findViewById(R.id.btAddUser);

        btAddUser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {onAddUser(btAddUser);}

    public void onAddUser(View view) {
...

Computer, Java, Android, Informatik, XML, Progamm, Android Studio
Wie kann ich die Funktionen meiner Lagerverwaltung in Java erneut anzeigen lassen?

Hey zusammen!

Ich mache aktuell einen Kurs zur Programmiererin in Java und stehe noch am Anfang.

Aufgabe war es, eine Lagerverwaltung mit maximal 75 Kisten, einigen Funktionen und einem mehrdimensionalen Array zu erstellen.

Mittlerweile habe ich etwas zusammengebracht, jedoch scheitert es nun nur noch an einem Punkt:

Wenn ich das Programm starte kann ich eine Funktion auswählen und die Daten einer Kiste z.B. eingegeben. Jedoch startet dann immer wieder die gleiche Funktion und nicht erneut die Abfrage, welche Funktion gewählt werden soll. Wie kann ich einstellen, dass nach jeder Eingabe erneut nach der Funktion gefragt wird?

Ich hoffe es ist verständlich erklärt. Leider kann ich den kompletten Quelltext nicht rein kopieren. Es wird mir als zu lang angezeigt. Daher nur der Part mit der Funktionsauswahl. Vielleicht reicht das ja schon.

  public static void main(String[] args) {
    // Die Vereinbarung des Arrays
    int [][] lagerverwaltung = new int[75][4];
  
    // Auswahl der Funktion
    String funktionEinlesen;
    char funktion;
  
    System.out.println("Folgende Funktionen stehen Ihnen zur Auswahl: \n");
    System.out.println("A \t Eingabe einer neuen Kiste");
    System.out.println("B \t Löschen einer Kiste");
    System.out.println("C \t Ändern einer Kiste");
    System.out.println("D \t Daten einer Kiste anzeigen");
    System.out.println("E \t Daten aller Kisten anzeigen");
  
    funktionEinlesen = JOptionPane.showInputDialog("Wählen Sie eine Funktion");
    funktion = funktionEinlesen.charAt(0);
  
    // Auswahl auswerten
    switch(funktion) {
      case 'a':
      case 'A':
        System.out.println("\nSie haben \"Eingabe einer neuen Kiste\" gewählt");
        eingabe(lagerverwaltung);
        break;
      case 'b':
      case 'B':
        System.out.println("\nSie haben \"Löschen einer Kiste\" gewählt");
        löschen(lagerverwaltung);
        break;
      case 'c':
      case 'C':
        System.out.println("\nSie haben \"Ändern einer Kiste\" gewählt");
        ändern(lagerverwaltung);
        break;
      case 'd':
      case 'D':
        System.out.println("\nSie haben \"Daten einer Kiste anzeigen\" gewählt");
        anzeigen(lagerverwaltung);
        break;
    }
  
    System.exit(0);
  }
}
Computer, Technik, programmieren, Java, Technologie, Spiele und Gaming
Kann mir bitte schnell jemand bei einem Java fehler helfen?

Guten Tag zusammen,

ich habe auf meinem vServer zurzeit BungeeCord installiert. Dieser soll 2 Server miteinander verbinden. Server 1 kann ich starten und mich auch über BungeeCord via Minecraft verbinden. Doch bei Server 2 gibt es folgenen Fehler:

[0,077s][warning][os,thread] Failed to start thread - pthread_create failed (EAGAIN) for attributes: stacksize: 1024k, guardsize: 4k, detached.
[0,078s][warning][os,thread] Failed to start thread - pthread_create failed (EAGAIN) for attributes: stacksize: 1024k, guardsize: 0k, detached.
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
        at java.base/java.lang.Thread.start0(Native Method)
        at java.base/java.lang.Thread.start(Thread.java:798)
        at java.base/jdk.internal.ref.CleanerImpl.start(CleanerImpl.java:118)
        at java.base/java.lang.ref.Cleaner.create(Cleaner.java:203)
        at java.base/jdk.internal.ref.CleanerFactory.<clinit>(CleanerFactory.java:42)
        at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:729)
        at java.base/java.util.zip.ZipFile$CleanableResource.get(ZipFile.java:849)
        at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:247)
        at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:177)
        at java.base/java.util.jar.JarFile.<init>(JarFile.java:348)
        at java.base/java.util.jar.JarFile.<init>(JarFile.java:319)
        at java.base/java.util.jar.JarFile.<init>(JarFile.java:258)
        at java.base/sun.launcher.LauncherHelper.getMainClassFromJar(LauncherHelper.java:521)
        at java.base/sun.launcher.LauncherHelper.loadMainClass(LauncherHelper.java:747)
        at java.base/sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:655)

Der Server hat 16GB RAM, 2GB für BungeeCord, 6GB für Server 1 und 3GB für Server 2.

Danke für die Hilfe im Voraus,
MFG MrGLaDOS

Java, Error, Minecraft Server, vserver linux
Java - Komponenten aus einem Graph berechnen / Algorithmus?

Hallo, ich arbeite gerade an einem Graphenprogramm und der nächste Schritt ist es ,mir die Zusammenhangskomponenten des Graphes auslesen zu lassen.

Eine dafür notwendige Wegmatrix habe ich schon programmiert:

public void berechneKomponenten()
    {
        
        for (int i = 0; i < Matrix.length; i++)
        {
            for(int j = 0; j < Matrix[i].length; j++)
            {
                if(WegMatrix[i][j] == 1)
                {
                    int buchstabe_int = i+65;
                    char buchstabe_char = (char) buchstabe_int;
                    
                    System.out.print(buchstabe_char + ",");
                }                        
            }        
        }
    }

Die Ausgabe sieht so aus:

A, A, A, B, B, C, C, C, D, D, D, E, E

--------------------------------------------------------

Und das ist im Prinzip auch richtig, denn:

Die Buchstaben (A-E) habe ich zum Verständnis hinzugefügt.
-------------------------------------------------------------------------------------

Meine Wegmatrix hat:

  • 3 A's
  • 2 B's
  • 3 C's
  • 3 D's
  • 2 E's

Verglichen mit meiner Ausgabe:

A, A, A => 3 A's
B, B => 2 B's
C, C, C => 3 C's
D, D, D = > 3 D's
E, E => 2 E's

-----------------------------------

Doch die Ausgabe sollte so aussehen: (Siehe K1 und K2)

bzw so:

Wie schaffe ich das?

Danke!

Bild zum Beitrag
Computer, programmieren, Java, Informatik

Meistgelesene Fragen zum Thema Java