![](/img/trans.png)
[英]Passing variable from one jframe to another without closing any them
[英]Passing variable set in one Jframe from one to another
我有一个名为User的JFrame,在其中声明了一个名为id的变量,并根据某些条件将其设置为某个值。
我需要在另一个名为output的JFrame中使用此变量。
这是我的代码
class InputScreen extends javax.swing.JFrame {
public int id = 0;
private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {
if (condition){
id = 1;
System.out.println(id);
}
elseif (condition){
id = 2;
System.out.println(id);
}
elseif (condition){
id = 3;
System.out.println(id);
}
else{
System.exit(0);
}
我在Output框架中使用了一个构造函数,但它似乎不起作用。
public class Output extends javax.swing.JFrame {
int rule;
public Output(int Id){
rule = Id;
initComponents();
}
public Output() {
initComponents();
conn = MySqlConnect.ConnectDB();
}
更新的代码框架-输入
class InputScreen extends javax.swing.JFrame {
public int id = 0;
public int getID(){
return input_rule_id;
}
private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {
if (condition){
id = 1;
System.out.println(id);
}
elseif (condition){
id = 2;
System.out.println(id);
}
elseif (condition){
id = 3;
System.out.println(id);
}
表格-输出
private void formWindowActivated(java.awt.event.WindowEvent evt) {
Input InSc = new Input();
InSc.getId();
}
该值将传递所有原始数据类型。 使用对象包装器通过引用传递值。 例如AtomicInteger
class InputScreen extends javax.swing.JFrame {
private AtomicInteger id = new AtomicInteger(0);
private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {
if (condition){
id.set(1);
System.out.println(id);
}
else if (condition){
id.set(2);
System.out.println(id);
}
else if (condition){
id.set(3);
System.out.println(id);
}
else{
System.exit(0);
}
}
public class Output extends javax.swing.JFrame {
AtomicInteger rule;
public Output(AtomicInteger Id){
rule = Id;
initComponents();
}
public Output() {
initComponents();
conn = MySqlConnect.ConnectDB();
}
}
参数传递最简单的方法是将Output作为参数传递给InputScreen 。 然后,您可以只在InputScreen.submitButtonActionPerformed()逻辑中调用方法Output.setId(id) 。 但是,当应用程序增长时,这种方式会出现问题。
观察者模式更好的方法是将IdChangedListener作为观察者模式的一部分实现为已实现的ActionListener的代理。 当ActionListener触发时,您会将所有已注册为Observers的IdChangeListener调用到InputScreen 。 在输出中 ,提供方法setId(id)提供访问权限。 在实例化两个JFrame的地方 ,实现一个IdChangeListener ,将其添加到InputScreen,并在激发时调用Output.setId() 。
无论如何,对于一个事件,您会看到很多工作(和代码)。 同样,这种方法在应用程序大小和动态性方面也有其局限性。
内存中的EventBus最新方法是使用内存中的EventBus。 这消除了UI中组件的繁琐连接,并减少了代码大小。 但是,它限制了组件的重用,因为它们将对某些事件自动做出反应。 如果您不止一次拥有它们怎么办? 听不同的事件?
您需要考虑在哪里使用哪种方法。 我建议使用EventBus在应用程序的具体组件之间进行事件传播。 在中等大小的组件上使用观察者模式,而对于小尺寸或非常静态的组件使用参数传递。
您可以使用getter和setter。 在您要传递id变量的位置的Frame中定义一个getter方法。 例如
public int getID(){
return id;
}
在其他框架中,您可以仅使用此方法返回结果。 int id = getID();
解决此问题的另一种方法是使变量globe和static可变,以便可以将其导入其他框架并使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.