内部帧传递变量返回java

内部帧传递变量返回java,java,swing,jframe,parameter-passing,jinternalframe,Java,Swing,Jframe,Parameter Passing,Jinternalframe,作为一个菜鸟,我努力解决这个基本问题。 我有一个内部框架,使用主框架上的一个简单按钮打开 我希望能够从我的内部框架中得到一个变量的值,并在我的主框架上使用它进行计算 public interface XValueChangeListener { void xValueChanged(int newValueOfX); } public class MainFrame { private void doSomethingWithX(int x) { // ...

作为一个菜鸟,我努力解决这个基本问题。 我有一个内部框架,使用主框架上的一个简单按钮打开

我希望能够从我的内部框架中得到一个变量的值,并在我的主框架上使用它进行计算

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);
    }
}
内部框架:

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传递到主框架

我尝试了以下方法:

内部帧//执行的操作

new MAIN_FRAME(x);
主框架

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

提前感谢

有几种解决方案:

将大型机引用传递给内部帧,并在滑块状态更改时从内部帧调用主帧的方法。这将内部框架与主框架耦合

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)