Ich bin ein Anfänger in Java Swing. Ich habe versucht, einen einfachen Rechner zu erstellen, der nur + und - hat. Ich benutzte JButtons für "+" und "-" und fügte actionListener hinzu, um auf jede Schaltfläche zu reagieren. Allerdings kann ich nicht wirklich verstehen, warum die e.getSource() nicht funktioniert. Ist es ein dynamisches Versandproblem? Ich würde wirklich eine Hilfe schätzen !!JAVA Swing JButton ActionPerformed Methodenimplementierung .getSource-Methode
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.*;
import javax.swing.*;
class MenuExample implements ActionListener {
// JMenu menu1, menu2, menu3;
// JMenuItem i1, i2, i3, i4, i5;
JTextArea t1, t2;
JTextField t3;
JButton b1, b2;
MenuExample() {
JFrame f = new JFrame("Menu and MenuItem EX");
final JButton b1 = new JButton("+");
final JButton b2 = new JButton("-");
t3 = new JTextField();t3.setBounds(50, 350, 200, 30); t3.setEditable(false);
t1 = new JTextArea(); t1.setBounds(50,100,200,30);
t2 = new JTextArea(); t2.setBounds(50,250,200,30);
b1.addActionListener(this);
b2.addActionListener(this);
b1.setBounds(50, 450, 30, 30); b2.setBounds(100, 450, 30, 30);
f.add(b1); f.add(b2);f.add(t1); f.add(t2); f.add(t3);
f.setSize(800, 800);
f.setLayout(null);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
JButton button;
int answer=0;
String s1 = t1.getText();
String s2 = t2.getText();
int a = Integer.parseInt(s1);
int b = Integer.parseInt(s2);
Object source = e.getSource();
if (source instanceof JButton) {
button = (JButton) source;
System.out.println("called here at least?");
System.out.println(button.getClass());
if (button == b1) {
answer = a + b;
}
else if (button == b2) {
answer = a - b;
}
}
String result = String.valueOf(answer);
t3.setText(result);
}
}
public class JMenuPractice {
public static void main (String[] args) {
new MenuExample();
}
}
Vielen Dank für diese hilfreiche Antwort !! Möchten Sie als Alternative zur Verwendung von setBounds und null Layout einfach die Layout-Manager verwenden?wie flowLayout und BorderLayout? – ChatSev
@ChatSev: Ja, Sie könnten BorderLayout und FlowLayout verwenden. Ich neste oft JPanels, die jeweils ihr eigenes Layout verwenden. Im obigen Beispiel werden sowohl GridLayout als auch GridBagLayout verwendet. Lesen Sie das [Layout Manager Tutorial] (http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html) für weitere Informationen. –