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

时间:2015-05-19 19:02:29

标签: java swing

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

我尝试使用Buttons.this.setPreferredSize ....访问它,但我收到了此错误

  

在范围

中无法访问类型按钮的封闭实例

My Buttons类看起来像这样

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 
}

怎么能实现呢?

1 个答案:

答案 0 :(得分:1)

我通过在侦听器外创建按钮实例来解决问题。之前,扩展面板在this.add(new Buttons())中直接添加到了InterfaceCalc面板中,现在我创建了实例后,我将它添加到面板中,并用它来改变大小。