Переменная хранится в сеансе?/ Передача переменных между JFrames - PullRequest
0 голосов
/ 22 мая 2018

У меня есть два Jframes, как я могу передать переменную Meno от первого Jframe до 2-го кадра.Я думал о том, чтобы сохранить его в сессии, но не знаю, будет ли это работать.

код во 2-м кадре выглядит следующим образом.

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.Спасибо друзья :) 1006 *

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

Решение 1: Создайте имя класса как Constant и сохраните строку meno.затем используйте в любом месте и в любое время.

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

, затем установите значение meno в JFrame1, например

Constant.meno="SomeValue";

, затем извлеките значение из этой константы в JFrame 2

String meno=Constant.meno;

Решение 2: Передайте значение meno в Конструкторе как

Frame2 frame=new Frame2(Meno);

и получите значение meno в JFrame2 как

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

надеюсь, это поможетВы, если вам нужна дополнительная помощь, просто прокомментируйте ниже.

0 голосов
/ 22 мая 2018

Эта строка

String Meno = login.Meno; 

заставляет меня думать, что у вас есть что-то вроде

class Login {
    public String Meno;
}

с вашей рамкой, объявленной как

class MyFrame {
    private Login login;
}

То, что вы хотите, это иметьваш Login класс будет моделью вашего приложения, которое будет распространять изменения.Это означает, что у вас нет члена public, но есть методы получения / установки.

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

Если вы хотите отобразить это имя, вы можете сделать это:

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

Затем, поскольку имя может измениться, вам необходим механизм обновления компонентов графического интерфейса.Это можно сделать с помощью шаблона прослушивателя:

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 s следующим образом:

class MyFrame {
    Login login = Login.getInstance();
    // ...
}
0 голосов
/ 22 мая 2018

Вы можете создать собственный класс (который расширяет 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;
  }
}

Если у вас есть такой класс, вы можетелегко установить meno во втором JFrame, вызвав setMeno(meno) для созданного вами объекта (экземпляр JFrame2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...