繁体   English   中英

如何引用或访问Java Swing中用其他方法创建的对象(例如按钮)?

[英]How can I reference or access objects such as buttons made in another method in Java Swing?

我不知道自己的问题是否使用了正确的术语,如果听起来有点令人困惑,请提前抱歉。 所以基本上我想写一个Java Swing程序来创建GUI。 在整个GUI中,有多个组件/对象或多或少是统一的,因此我制定了单独的方法来创建不同的对象和面板,并将它们组合到master面板中,然后再传递回frame

我对整个GUI的布局和外观进行了布局,但还算不上功能。 我的问题是我有动作侦听器,它们需要引用或访问在另一个方法/类中添加到面板中并作为面板传递回的按钮或对象。 例如,

    class makeComponents extends JPanel {
        public makeComponents() { 

        }

        public JToggleButton ToggleButton() {
          // Creates On/Off buttons as switches
            JToggleButton button = new JToggleButton("OFF", false);
            button.addActionListener(new ActionListener() {
                AbstractButton abstractButton = (AbstractButton)e.getSource();
                if (abstractButton.isSelected()) {
                    abstractButton.setText("ON");
                  // Want to add CardLayout card.show() to switch pictures
                }
                else {
                    abstractButton.setText("OFF");
                  // Want to add CardLayout card.show() to switch pictures
                }
            }
            return button;
         }
     }

我在单独的left JPanel上有一个像上面一样的开/关按钮,然后在right JPanel的CardLayout中有2个图像,并且这2个面板在master JPanel中连接在一起,并传递回框架。 我创建了太多的图层,我不知道如何回溯和访问这些图片,因此我可以在另一个面板中翻转2张图像的CardLayout。

我希望我足够清楚,任何帮助将不胜感激。 先感谢您!

您可以简单地将所有类合并到一个内部具有私有类的类中,然后可以像这样控制clas对象:

public class Master {

    int x;
    int y;
    Inside1 inside;
    Inside2 in2;
    private class Inside1{
        public Inside1(){
            foo();
        }
        private void foo(){
            x=5; //Master.x <---
        }
    }

    private class Inside2{
        public Inside2(){
            inside = new Inside1(); //<- new object of inside1 form Master 
            bar();
        }

        private  void bar(){
            y=15; //Master.y
        }
    }

    public Master(){
        in2 = new Inside2();
    }


}

如您所见,我可以访问私有类内部的大师类的所有私有字段。 您可以重写您的类,并将其放入JFrame类中,问题已解决!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM