内部帧传递变量返回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)