Java 理解 getSource() 和动作监听器

Pet*_*son 0 java swing actionlistener actionevent

我正在尝试了解有关 actionListeners 的更多信息。

如果单击“保存”按钮,我尝试打印出消息“测试操作”。无论如何,我完全不明白。

这是我的代码,希望任何人都可以帮助我。提前致谢。

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.*;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

public class applet extends JApplet implements ActionListener {

    private static final long serialVersionUID = -5561312464056465383L;
    private JTextField txtNameEingeben;
    private JTextField txtPwEingeben;

    public applet() {
        getContentPane().setLayout(new GridLayout(1, 0, 0, 0));
        JPanel panel = new JPanel();
        panel.setBackground(Color.DARK_GRAY);
        getContentPane().add(panel);
        panel.setLayout(null);
        JLabel lblANewLabel = new JLabel("Name");
        lblANewLabel.setHorizontalAlignment(SwingConstants.LEFT);
        lblANewLabel.setFont(new Font("Lucida Grande", Font.PLAIN, 20));
        lblANewLabel.setBounds(33, 57, 117, 37);
        lblANewLabel.setForeground(Color.WHITE);
        panel.add(lblANewLabel);
        //TEXTFELD NAME
        txtNameEingeben = new JTextField();
        txtNameEingeben.setText("");
        txtNameEingeben.setBounds(162, 64, 134, 28);
        panel.add(txtNameEingeben);
        txtNameEingeben.setColumns(10);
        //TEXTFELD PASSWORT
        txtPwEingeben = new JTextField();
        txtPwEingeben.setText("");
        txtPwEingeben.setBounds(162, 113, 134, 28);
        panel.add(txtPwEingeben);
        txtPwEingeben.setColumns(10);
        //LABEL ÜBERSCHRIFT
        JLabel lblNamePasswort = new JLabel("Name & Passwort in einem Array     speichern");
        lblNamePasswort.setForeground(Color.WHITE);
        lblNamePasswort.setHorizontalAlignment(SwingConstants.CENTER);
        lblNamePasswort.setBounds(0, 23, 450, 16);
        panel.add(lblNamePasswort);
        JButton btnSave = new JButton("save");
        btnSave.setBounds(308, 251, 117, 29);
        panel.add(btnSave);
        btnSave.addActionListener(new events());    
    }

    public void save(ActionEvent event) {
        System.out.println("Button gedrückt.");
    }

    public void actionPerformed(ActionEvent event) {
        if (event.getSource(btnSave)) {
            System.out.println("Test Action");
        }
    }

    public static void main(String[] args) {
        applet applet1 = new applet();
        applet1.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

mKo*_*bel 5

  1. 不要使用保留的 Java 类和方法名称作为项目名称。public class applet extends...应该是public class MyApplet extends....

  2. 使用正确的Java 命名约定

  3. 使用JFrame代替JApplet,创建JFrame为局部变量而不是扩展 JFrame,类似于 forprivate JTextField txtNameEingeben;

  4. LayoutManager而不是AbsoluteLayout (setBounds(...))

  5. btnSave.addActionListener(new events());events()未声明

  6. 你应该使用 event.getSource() == btnSave而不是event.getSource(btnSave)

  7. 阅读有关如何编写操作侦听器的 Oracle 教程