变量存储在Session中? /在JFrame之间传递变量

时间:2018-05-22 09:07:33

标签: java sql jframe

我有两个Jframe,如何将Variable Meno从第一个Jframe传递到第二个帧。 我在考虑将它存储在Session中,但不知道它是否可行。

第二帧的代码看起来像这样。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String Meno = login.Meno; 
    String Prispevok = jTextArea2.getText();

    try {
        connection = DriverManager.getConnection(login.host + login.databaza, login.username, login.password);
        java.sql.Statement st = connection.createStatement(); 
        st.executeUpdate("INSERT INTO history (`Name`, `Post`) " + "VALUES ('"+Meno+"' , '"+Prispevok+"')");
    } catch (SQLException err) {
        System.out.println(err.getMessage());
    }      
}                                        
我很抱歉,如果我错了,但我在Stackoverflow中是新的。谢谢各位朋友:)

3 个答案:

答案 0 :(得分:0)

您可以创建一个自定义类(扩展JFrame),如果需要,可以使用public void setMeno(String meno)public String getMeno()之类的方法,以便将变量传递给JFrame。我不确定这是不是你的意思,因为你没有提供很多细节。

基本示例:

public class JFrame2 extends JFrame{
  private String meno;

  public void setMeno(String meno)
  {
    this.meno = meno;
  }
}

如果你有这样的类,你可以通过在你创建的对象(JFrame2的实例)上调用setMeno(meno)来轻松地在第二个JFrame中设置meno。

答案 1 :(得分:0)

解决方案1: 创建一个类名称为常量并存储字符串meno。然后随时随地使用。

public Class Constant{
    public static String meno="";
}

然后将值设置为JFrame1中的meno,如

Constant.meno="SomeValue";

然后从JFrame 2中的常量中检索值

String meno=Constant.meno;

解决方案2: 在构造函数中传递值meno,如

Frame2 frame=new Frame2(Meno);

并检索JFrame2中的meno值,如

String meno;
public Frame2(String _meno){
    meno=_meno;
}

希望这对您有所帮助,如果您需要进一步的帮助,请在下面发表评论。

答案 2 :(得分:0)

这一行

String Meno = login.Meno; 

让我觉得你有类似

的东西
class Login {
    public String Meno;
}

将您的框架声明为

class MyFrame {
    private Login login;
}

您想要的是让您的Login类成为您的应用程序的模型,它将分发更改。这意味着您没有public成员,而是getter / setter方法。

class Login {
    private String meno;
    public void setMeno(String n) { this.meno = n; }
    public String getMeno() { return meno; }
}

如果要显示该名称,可以这样做:

JTextField field = new JTextField(login.getMeno());

然后,因为名称可能会更改,所以需要一种GUI组件更新机制。这可以使用侦听器模式完成:

interface NameListener {
    public void nameChanged(String newName);
}

class Login {
    private String meno;
    private Collection<NameListener> listeners = new ArrayList<>();
    public void addListener(NameListener l) { listeners.add(l); }
    public void setMeno(String n) {
        meno = n;
        for (NameListener l : listeners) { l.nameChanged(n); }
    }
}

要在文本字段中启用更新,您可以执行

JTextField field = new JTextField(login.getMeno());
login.addListener(n -> field.setText(n));

由于你只有一个Login实例(你应该使用单例模式),另一个框架可以像这样注册一个监听器。以下是您如何声明单个Login类:

class Login {
    private static final Login INSTANCE;
    private Login() {}
    public Login getInstance() {
        if (INSTANCE == null) { INSTANCE = new Login(); }
        return INSTANCE;
    }

    private String meno;
    // ...
}

然后您可以在JFrame中使用它:

class MyFrame {
    Login login = Login.getInstance();
    // ...
}