【问题标题】:use actionlistener to call void function in same class使用 actionlistener 在同一个类中调用 void 函数
【发布时间】:2013-12-11 13:55:26
【问题描述】:

我在使用动作监听器调用同一类中的函数 void 时遇到问题。

例子.. 代码:

public class Product extends JPanel {

    JButton add;
    JPanel pAdd;
    JLabel test;
    JFrame frame;

    public Product() {
        add = new JButton("Add Product");
        add.addActionListener(new ButtonListener());

        add(add);
    }

    public void panelAdd(){
        pAdd = new JPanel();
        pAdd.add(new JLabel("try"));
        add(pAdd);

    }

    private class ButtonListener implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            panelAdd();
        }
    }
}

如何调用panelAddvoid方法?

【问题讨论】:

  • 将 Product 设为静态,或使用 Product 实例为 ButtonListener 创建构造函数以将其保留为字段
  • 我不明白你的问题。类编译。所以你可以像这样调用你的 void 方法!那么,您对此的真正问题是什么?
  • bobbel ..是的,类编译..但我的gui没有出现..起初我运行公共产品方法..然后当我点击“添加”按钮时,我想要它运行 panelAdd 方法..但它没有出现..

标签: java swing methods actionlistener void


【解决方案1】:

添加组件到可见的JFrame/JPanel/其他组件时,添加后需要调用revalidate()repaint()方法。更改您的panelAdd(),如下所示:

public void panelAdd(){
    pAdd = new JPanel();
    pAdd.add(new JLabel("try"));
    add(pAdd);
    revalidate();
    repaint();
}

【讨论】:

    【解决方案2】:

    如果你放

     System.out.println("hi");
    

    public void panelAdd(){
      System.out.println("hi");
       pAdd = new JPanel();
       pAdd.add(new JLabel("try"));
       add(pAdd);
    

    }

    你会看到你的控制台打印出你好,你的代码正在运行,但是你的布局有问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 2016-06-24
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多