如何打印触发事件的按钮名称?

时间:2018-04-11 15:25:29

标签: java swing actionlistener jtextfield

我制作了这个程序,当我点击某个按钮时,我想打印一条消息和按钮的名称。但它不会打印任何内容,也不会出现任何错误。

public class Example {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setTitle("Hello");
        frame.setSize(400, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        frame.setLayout(new BorderLayout());

        JPanel buttonsPanel = new JPanel();
        buttonsPanel.setLayout(new GridLayout(2, 2));

        JTextArea txtArea = new JTextArea();
        HelloActionListener listen = new HelloActionListener(txtArea);
        JButton b1 = new JButton("TOP");
        b1.addActionListener(listen);
        JButton b2 = new JButton("LEFT");
        JButton b3 = new JButton("RIGHT");
        JButton b4 = new JButton("BOTTOM");
        b4.addActionListener(listen);
    }
}

班级HelloActionListener

public class HelloActionListener implements ActionListener {

    public JTextArea area;

    public HelloActionListener(JTextArea area) {
        this.area = area;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        JButton x = (JButton) e.getSource();
        area.setText("Hello Folks" + x.getText());
    }
}

有谁知道我的错误在哪里?

2 个答案:

答案 0 :(得分:1)

我看到三个主要问题。第一个是您没有将Button添加到您创建的JpanelbuttonsPanel)中,也没有添加buttonsPanelframe,您也无法将txtArea添加到frame。其次,您的操作顺序已关闭。我建议您在完成框架构建后调用frame.setVisible(true)。第三个问题是您使用BorderLayout上的JFrame,这不是一个非常好的布局(在我看来)。你的听众和其他代码看起来都很好。

将代码更改为此似乎可以使其按预期运行:

public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setTitle("Hello");
    frame.setSize(400, 200);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new GridLayout(2,1));

    JPanel buttonsPanel = new JPanel();
    buttonsPanel.setLayout(new GridLayout(2, 2));

    JTextArea txtArea = new JTextArea("Place Holder");
    txtArea.setColumns(2);
    HelloActionListener listen = new HelloActionListener(txtArea);
    JButton b1 = new JButton("TOP");
    b1.addActionListener(listen);
    buttonsPanel.add(b1);
    JButton b2 = new JButton("LEFT");
    buttonsPanel.add(b2);
    JButton b3 = new JButton("RIGHT");
    buttonsPanel.add(b3);
    JButton b4 = new JButton("BOTTOM");
    b4.addActionListener(listen);
    buttonsPanel.add(b4);

    frame.add(txtArea);
    frame.add(buttonsPanel);

    frame.setVisible(true);
}

我建议您阅读有关Java中布局管理器的this guide。即使它在这里工作,这也不是一个很好的布局方式。

答案 1 :(得分:0)

您忘了将txtArea添加到相框中。