Ich möchte ein Programm erstellen in dem die meisten Buttons deaktiviert sind, damit diese nicht angeklickt werden können, wenn noch nicht alle Daten erfasst sind. So soll z. B. geprüft werden ob alle Textfelder gefüllt sind. Erst wenn dies der Fall ist, sollte der Button "Daten erfassen" aktiviert werden.
Die Prüfung soll in einer anderen Klasse in einem anderen Paket stattfinden. Die Buttons sind Private deklariert und zum aktivsetzen des Buttons ist ein entsprechender Setter vorhanden. Um nicht zu viel überflüssigen Code posten zu müssen, habe ich ein Programm geschrieben, welches die Problematik exakt wiedergibt. Es besteht im Grunde nur aus zwei Buttons. Der erste ist deaktiviert und soll aktiviert werden, wenn der zweite angeklickt wird.
Hier der code:
In der Klasse "pressButton" wird nur der Setter angesprochen, welcher den ersten Button setEnabled(true) schalten soll.
Das die Settermethode erreicht wird, lässt sich anhand einer kleinen Konsolentextausgabe nachvollziehen. Die Zeile "this.btn_button.setEnabled(b)" scheint jedoch nicht berücksichtigt zu werden. Es erscheint keine Fehlermeldung und der Button wird nicht aktiv geschaltet. Der übergebene Boolean b hat zu diesem Zeitpunkt den wert "true". Das habe ich im Debugging-Modus sehen können.
Vermutlich ist es nur eine Kleinigkeit die ich übersehen habe. Aber ich brüte nun schon seit einigen Tagen an diesem Problem und finde keine Lösung. Google und die Forensuche haben mir bisher leider auch nicht weitergeholfen. Könnt ihr mir sagen was ich falsch mache?
Ich danke euch schon mal für eure Unterstützung.
Viele Grüße
nobsche
Die Prüfung soll in einer anderen Klasse in einem anderen Paket stattfinden. Die Buttons sind Private deklariert und zum aktivsetzen des Buttons ist ein entsprechender Setter vorhanden. Um nicht zu viel überflüssigen Code posten zu müssen, habe ich ein Programm geschrieben, welches die Problematik exakt wiedergibt. Es besteht im Grunde nur aus zwei Buttons. Der erste ist deaktiviert und soll aktiviert werden, wenn der zweite angeklickt wird.
Hier der code:
Java:
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class buttons extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JButton btn_button;
private JButton btn_button2;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
buttons frame = new buttons();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public buttons() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
btn_button = new JButton("Button");
btn_button.setEnabled(false);
btn_button.setBounds(29, 12, 114, 25);
contentPane.add(btn_button);
btn_button2 = new JButton("Button 2");
btn_button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
new pressButton().activateButton();
}
});
btn_button2.setBounds(29, 60, 114, 25);
contentPane.add(btn_button2);
}
public void setBtn_button2(boolean b) {
System.out.println("erreicht"); //Zum Testen ob die Methode erreicht wird.
this.btn_button.setEnabled(b);
}
}
Java:
public class pressButton {
public void activateButton() {
buttons ab = new buttons();
ab.setBtn_button2(true);
}
}
In der Klasse "pressButton" wird nur der Setter angesprochen, welcher den ersten Button setEnabled(true) schalten soll.
Das die Settermethode erreicht wird, lässt sich anhand einer kleinen Konsolentextausgabe nachvollziehen. Die Zeile "this.btn_button.setEnabled(b)" scheint jedoch nicht berücksichtigt zu werden. Es erscheint keine Fehlermeldung und der Button wird nicht aktiv geschaltet. Der übergebene Boolean b hat zu diesem Zeitpunkt den wert "true". Das habe ich im Debugging-Modus sehen können.
Vermutlich ist es nur eine Kleinigkeit die ich übersehen habe. Aber ich brüte nun schon seit einigen Tagen an diesem Problem und finde keine Lösung. Google und die Forensuche haben mir bisher leider auch nicht weitergeholfen. Könnt ihr mir sagen was ich falsch mache?
Ich danke euch schon mal für eure Unterstützung.
Viele Grüße
nobsche