我有一个名为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);
}
我在框架输出中使用了构造函数,但它似乎不起作用。
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();
}
答案 0 :(得分:1)
所有原始数据类型都将通过值传递。使用对象包装器通过引用传递值。例如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();
}
}
答案 1 :(得分:1)
参数传递 最简单的方法是将输出作为参数传递给 InputScreen 。然后,您可以在 InputScreen.submitButtonActionPerformed()逻辑中调用方法 Output.setId(id)。但是,当应用程序增长时,这种方式会有点问题。
观察者模式 更好的方法是将 IdChangedListener 作为Observer模式的一部分实现为已经实现的ActionListener的代理。触发ActionListener时,将所有已注册为 InputScreen 的观察者的 IdChangeListeners 调用。在输出中,您提供了一个方法 setId(id)来提供访问权限。在实例化实现 IdChangeListener 的两个JFrame的位置,将其添加到 InputScreen ,当它触发时,调用 Output.setId()。
无论如何,你只看到一个事件的大量工作(和代码)。此方法也有其在应用程序大小和动态方面的局限性。
在Memory EventBus中 最新的方法是在内存中使用EventBus。这消除了UI中组件的硬连线并减少了代码大小。但是,它限制了组件的重用,因为它们会自动对某些事件做出反应。如果你不止一次拥有它们怎么办?听不同的事件?
您需要考虑使用哪种方法。我建议使用EventBus在应用程序的具体组件之间传播事件。在中等大小的组件上使用Observer模式,同时使用小型或非常静态的参数传递。
答案 2 :(得分:0)
您可以使用getter和setter。在框架中定义要从中传递id变量的getter方法。例如
public int getID(){
return id;
}
在您的其他框架中,您可以使用此方法返回结果。 int id = getID();
解决此问题的另一个方法是将变量globe和static设置为可以将其导入到另一个框架中并进行使用。