Передача значений в 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 и сделайте с ним то, что вы изначально делали

Другие вопросы по тегам