【问题标题】:Internal frame pass variable back java内部帧传递变量返回java
【发布时间】:2013-05-17 15:08:12
【问题描述】:

作为一个新手,我在这个基本问题上苦苦挣扎。 我有一个内部框架,可以使用主框架上的一个简单按钮打开。

我希望能够从我的内部框架中获取一个变量的值,并将其用于我的主框架上的计算。

内部框架:

private void jSlider1StateChanged(javax.swing.event.ChangeEvent evt) {                                      
int x = jSlider1.getValue();
}

效果很好。

主框架:

int x = INTERNAL_FRAME.x;  //ERROR: Cannot find variable

int x = INTERNAL_FRAME.jSlider1.getValue(); //ERROR: jslider has private access

如何将 x 传递给我的 MAIN FRAME?

我尝试了以下方法:

内部框架 //执行的操作

new MAIN_FRAME(x);

MAIN_FRAME

public MAIN_FRAME(x){
double var = x;
initComponents();
}

提前致谢

【问题讨论】:

    标签: java swing jframe parameter-passing jinternalframe


    【解决方案1】:

    有几种解决方案:

    将mainFrame引用传递给内部框架,当滑块状态发生变化时,从内部框架调用主框架的方法。这会将内部框架与主框架耦合

    public class MainFrame {
        public void doSomethingWithX(int x) {
            // ...
        }
    
        public void showInternalFrame() {
            InternalFrame f = new InternalFrame(this);
            // ...
        }
    }
    
    public class InternalFrame {
        private MainFrame mainFrame;
    
        public InternalFrame(MainFrame mainFrame) {
            this.mainFrame = mainFrame;
        }
    
        private void jSlider1StateChanged(ChangeEvent evt) {
            int x = jSlider1.getValue();
            mainFrame.doSomethingWithX();
        }
    }
    

    或者将某个接口的引用(例如XValueChangeListener)从主框架传递给内部框架,并在x发生变化时从内部框架调用xValueChanged()方法。这将内部框架与主框架分离。

    public interface XValueChangeListener {
        void xValueChanged(int newValueOfX);
    }
    
    public class MainFrame {
        private void doSomethingWithX(int x) {
            // ...
        }
    
        public void showInternalFrame() {
            InternalFrame f = new InternalFrame(new XValueChangeListener() {
                @Override
                public void xValueChanged(int newValueOfX) {
                    doSomethingWithX(x);
                }
            });
            // ...
        }
    }
    
    public class InternalFrame {
        private XValueChangeListener listener;
    
        public InternalFrame(XValueChangeListener listener) {
            this.listener = listener;
        }
    
        private void jSlider1StateChanged(ChangeEvent evt) {
            int x = jSlider1.getValue();
            listener.xValueChanged(x);
        }
    }
    

    如果需要,您可以将最后一个解决方案与标准 Java 事件一起使用(例如 ChangeListener 或 PropertyChangeListener)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多