【问题标题】:How can I reference or access objects such as buttons made in another method in Java Swing?如何引用或访问对象,例如在 Java Swing 中以另一种方法制作的按钮?
【发布时间】:2013-11-15 09:43:57
【问题描述】:

我不知道我是否在我的问题中使用了正确的术语,如果听起来有点混乱,请提前道歉。所以基本上我正在尝试编写一个 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 个图像,这两个面板在 master JPanel 中连接在一起,它被传递回框架。我创建了太多图层,以至于我不知道如何回溯和访问这些图片,因此我可以在另一个面板中翻转 2 张图像的 CardLayout。

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

【问题讨论】:

    标签: java swing user-interface


    【解决方案1】:

    您可以简单地将所有内容合并到一个内部具有私有类的类中,然后您就可以像这样访问主类对象:

    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 类中并解决问题!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多