有几种解决方案:
将 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)。