Java 从另一个类中的侦听器访问扩展JPanel

Java 从另一个类中的侦听器访问扩展JPanel,java,swing,Java,Swing,我想从另一个类中的侦听器访问扩展的JPanel,以便在单击按钮时重新调整面板的大小 我试图使用按钮访问它。this.setPreferredSize…,但出现了此错误 范围内无法访问类型按钮的封闭实例 我的纽扣课看起来像这样 public class Buttons extends JPanel { public Buttons() { //code } } 另一个是我想改变面板大小的地方 public class InterfaceCalc extends JPa

我想从另一个类中的侦听器访问扩展的JPanel,以便在单击按钮时重新调整面板的大小

我试图使用
按钮访问它。this.setPreferredSize
…,但出现了此错误

范围内无法访问类型按钮的封闭实例

我的纽扣课看起来像这样

public class Buttons extends JPanel {
    public Buttons() {

    //code

    }
}
另一个是我想改变面板大小的地方

public class InterfaceCalc extends JPanel {
    // others codes 
    expandIcon = new ImageIcon("src\\img\\expand.png");
    expand = new JButton("", expandIcon);
    expand.setBorderPainted(false);
    expand.setContentAreaFilled(false);
    expand.setFocusPainted(false);
    expand.setOpaque(false);
    expand.setMargin(new Insets(0, 0, 0, 0));
    expand.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            if (!on) {
                Buttons.sqrt.setVisible(true);
                Buttons.log.setVisible(true);
                Buttons.cos.setVisible(true);
                Buttons.sin.setVisible(true);
                // this is where is want to access the panel
                Buttons.this.setPreferredSize(new Dimension());

                on = true;

            } else {
                Buttons.sqrt.setVisible(false);
                Buttons.log.setVisible(false);
                Buttons.cos.setVisible(false);
                Buttons.sin.setVisible(false);

                on = false;

            }

        }

    });
  // others codes 
}

如何才能做到这一点

我通过在监听器外部创建按钮实例修复了这个问题。以前,扩展面板是这样直接添加的。在InterfaceCalc面板中添加(new Buttons()),现在在创建实例后,我将其添加到面板中,并使用它来更改大小。

您希望
按钮是什么。
指向什么?我希望它指向
扩展JPanel
,我可以使用
按钮从同一个类访问它。这就是我在第二个类中尝试它的原因。像这样
按钮setPreferredSize(新维度(500500))
?我这样做了,它得到了这个
无法从JComponent类型中静态引用非静态方法setPreferredSize(Dimension)
这个
引用封闭类的实例(相对于调用
这个
的语句)。从您的问题很难判断,但我认为您希望在
InterfaceCalc
内部创建一个
Buttons
实例,然后在该实例上执行
actionPerformed
中的操作。谢谢各位,我通过在侦听器外部创建一个
Buttons
实例解决了这个问题。以前,在
InterfaceCalc
面板中的
this.add(new Buttons())
中直接添加扩展面板,现在在创建实例后,我将其添加到面板中,并使用它更改大小。