Передача значений в jDialog и запуск процесса при открытии
Мне нужно запрограммировать такое поведение: из основного фрейма с помощью ButtonListener я открываю окно "истории" (jDialog? JFrame?). Это "историческое" окно должно выполнить запрос к базе данных с параметром (Param), переданным из главного окна, и принести результаты при открытии.
Поэтому я создал DlgHistory с приватным iParam и методом для его установки. Но где я должен поместить свой процесс getHistory для запуска? Если я установил его в конце "public DlgHistory()" - он запускается до setParam, поэтому iParam пуст (хотя позже он будет установлен правильно)
окно вызова:
JButton btnHistory = new JButton("History");
btnHistory.setBounds(176, 413, 113, 23);
frame.getContentPane().add(btnHistory);
btnHistory.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Running history");
DlgHistory Hist= new DlgHistory();
Hist.setParam(iParam);
Hist.setVisible(true);
});
История jDialog:
public class DlgHistory extends JDialog {
private final JPanel contentPanel = new JPanel();
private int iParam;
/**
* Launch the application.
*/
public static void main(String[] args) {
try {
DlgHistory dialog = new DlgHistory();
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the dialog.
*/
public DlgHistory() {
setBounds(100, 100, 450, 300);
getContentPane().setLayout(new BorderLayout());
contentPanel.setLayout(new FlowLayout());
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
getContentPane().add(contentPanel, BorderLayout.CENTER);
{
// buttons definitions
}
// This proc should run after setParam
getHistory(iParam);
}
public void setParam(int Param){
System.out.println("Setting param" + Param);
this.iParam = Param;
}
private void getHistory(int iParam) {
System.out.println(" run query with param: " " + iParam);
// run query
}
}
1 ответ
JButton btnHistory = new JButton("History");
btnHistory.setBounds(176, 413, 113, 23);
frame.getContentPane().add(btnHistory);
btnHistory.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Running history");
//Some function that will do your query
iParam=somefunction();
DlgHistory Hist= new DlgHistory(iParam);
Hist.setVisible(true);
});
и внесите изменения в конструктор DlgHistory и сделайте с ним то, что вы изначально делали