作为一个新手,我在努力解决这个基本问题。 我有一个内部框架,使用我主框架上的一个简单按钮打开。
我希望能够从我的内部框架中获取一个变量的值,并将其用于我的主框架上的计算。
内部框架:
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();
}
提前致谢
答案 0 :(得分: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)。