学习GUI - 使用actionPerformed()处理按钮操作

时间:2016-03-06 20:06:21

标签: java swing

我正在从教程中学习GUI,并且可以通过一些指示来解决目前无法正常工作的最佳方法。

背景:我有一个包含main方法的类,它扩展了JFrame,并初始化了一个扩展JPanel(panel1)的类。

panel1包含一个硬编码的.txt文件URL,该文件的内容决定了帧中显示的内容(这很好)。我试图修改程序,以便用户可以从他们的机器中选择.txt文件...

为此,我创建了一个名为panel2的第三个类(扩展了JPanel,实现了ActionListener),其中包含一个JButton。 (我已经创建了一个新的JPanel,因为会有更多的按钮,所以它提供了布局。)

我已从panel2中挑选出与出错相关的代码:

private String f;
private JButton b;

在构造函数中:

b = new JButton("Button");
add(b);

方法:

public String getName() {
    return f;
}

 public void actionPerformed(ActionEvent e) {
 if (e.getSource() == b) {
    int returnVal = fc.showOpenDialog(frame);
    if (returnVal == JFileChooser.APPROVE_OPTION) {
    this.f = fc.getSelectedFile().getAbsolutePath();

如果我调用getName(),它将返回null。我需要将字符串传递给panel1以替换硬编码的URL,我打算使用getName()来实现。我知道我在做一些非常基本的错误!!任何指针都会非常感激。

1 个答案:

答案 0 :(得分:2)

我不确定我是否理解你的问题......

但是如果你想让panel1在选择panel2中的文件时作出反应,你需要从panel2到panel1的引用。 有不同的方法:

  • 您可以简单地将panel1对象作为参数放在panel2的构造函数中,并在需要时调用panel1的方法。
  • 或者您可以使用听众。例如,panel2可以为url属性触发属性更改事件。当您的panel2扩展JPanel时,它已经拥有处理属性更改侦听器的所有方法(请参阅方法firePropertyChangeaddPropertyChangeListener)。然后让panel1听这个事件。