【问题标题】:Why is my JPanel empty after button is clicked?为什么单击按钮后我的 JPanel 为空?
【发布时间】:2016-09-21 20:12:17
【问题描述】:

我正在学习如何在 Java 中为单击按钮创建事件侦听器。我想要一个面板弹出表单项。我已经在动作侦听器的构造函数中构建了面板,但是当它打开时它是空的。我认为只构建这个是有意义的,然后在单击按钮时显示它(actionPerformed)。显然不是:)

下面是我的 ActionListener 类:

package biz.martyn.budget;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class NewTransaction implements ActionListener {

    protected JPanel panel = new JPanel(new GridLayout(0, 1));

    public void NewTransaction() {      
        String [] category = {"Internet", "Clothes", "Rent", "Salary", "Groceries"};
        JComboBox combo = new JComboBox(category);

        panel.add(combo);

        panel.add(new JLabel("Description:"));
        JTextField desc = new JTextField();
        panel.add(desc);

        panel.add(new JLabel("Date:"));
        JTextField date = new JTextField();
        panel.add(date);

        panel.add(new JLabel("Amount:"));
        JTextField amount = new JTextField();
        panel.add(amount);
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        int result = JOptionPane.showConfirmDialog(null, panel, "New transaction",
            JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
    }
}

这是我附加事件的方式:

JButton newTransactionButton = new JButton("New transaction");
newTransactionButton.addActionListener(new NewTransaction());
toolbar.add(newTransactionButton);

在做这种事情时,我会很感激任何关于约定的额外建议,因为我是初学者,谢谢。

【问题讨论】:

标签: java swing


【解决方案1】:

我已经在动作监听器的构造器中构建了面板,但是打开时它是空的

以下...

public void NewTransaction() {

...是一种方法,而不是构造函数。您需要显式调用它,或者将其更改为构造函数

public NewTransaction() {

【讨论】:

    猜你喜欢
    • 2015-12-29
    • 2014-10-04
    • 2012-06-14
    • 2012-09-07
    • 1970-01-01
    • 2016-07-15
    • 2017-10-30
    • 2021-09-25
    • 1970-01-01
    相关资源
    最近更新 更多