2013-05-17 73 views
0

作爲一個新手,我與這個基本問題鬥爭。 我有一個內部框架,使用我的主框架上的一個簡單按鈕打開。內部框架傳遞變量java

我希望能夠從我的內部框架中獲得一個變量的值,並將其用於我的主框架上的計算。

內部框架:

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); 

MAIN_FRAME

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

感謝

回答

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例如)參考,並且從當內部框架調用xValueChanged()方法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); 
    } 
} 

,如果你想(像的ChangeListener或的PropertyChangeListener),你可以使用最後的解決方案與標準的Java事件。