Почему моя программа не ждет, пока я нажму кнопку в окне, чтобы затем открыть другое окно - PullRequest
0 голосов
/ 12 июня 2019

Вот мой код, я просто хочу знать, как я могу заставить свою программу ждать, пока я нажму ok в первом окне, а затем открою следующее окно вместо того, чтобы открывать их оба одновременно.Например, я хочу, чтобы появилось окно с надписью «эй», и программа ждет, пока я нажму «ОК», затем откроется окно с надписью «Пока», а затем программа подождет, пока я нажму «ОК» (кнопка).

public class Interface extends JFrame implements ActionListener
{
JButton botonOk1 = new JButton("Ok");
JButton botonOk2 = new JButton("Ok");
JFrame frame1 = new JFrame();
JFrame frame2 = new JFrame();

public void createFirstInterface(String x){
    botonOk1.addActionListener(this);
    JLabel label = new JLabel(x);
    label.setFont(new Font("Arial", Font.PLAIN, 20));
    botonOk1.setBounds(270, 200, 150, 50);
    label.setBounds(200, 10, 250,150);
    frame1.setLayout(null);
    frame1.setMinimumSize(new Dimension(700,365));
    frame1.add(label);
    frame1.add(botonOk1);
    frame1.pack();
    frame1.setVisible(true);
}

public void createSecondInterface(String y){
    botonOk2.addActionListener(this);
    JLabel label = new JLabel(x);
    label.setFont(new Font("Arial", Font.PLAIN, 20));
    botonOk2.setBounds(270, 200, 150, 50);
    label.setBounds(200, 10, 250,150);
    frame2.setLayout(null);
    frame2.setMinimumSize(new Dimension(700,365));
    frame2.add(label);
    frame2.add(botonOk2);
    frame2.pack();
    frame2.setVisible(true);
}



public void call(){
    createFirstInterface("hey");
    createSecondInterface("bye");

}

public static void main(String[] args){
    Interface interface = new Interface();
    interface.call();
}

public void actionPerformed(ActionEvent e){
    Object check;
    check = new Object();
    check = e.getSource();

    if(check == botonOk1){
        frame1.setVisible(false);
    }

    if(check == botonOk2){
        frame2.setVisible(false);
    }
}

}

1 Ответ

0 голосов
/ 12 июня 2019

Или, что еще лучше, создайте для Windows модальные диалоговые окна, такие как JDialog, для которого ModalityType установлено значение APPLICATION_MODAL.Таким образом, поток программы ожидает обработки диалогового окна (чтобы больше не отображать), прежде чем продолжить.

Например:

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagLayout;
import java.awt.Window;
import java.awt.Dialog.ModalityType;

import javax.swing.*;

public class Interface2 {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            Interface2 interface2 = new Interface2();
            interface2.call();
        });
    }

    public void call() {
        createInterface("Hey");
        createInterface("Bye");
        System.exit(0);
    }

    private void createInterface(String text) {
        JLabel label = new JLabel(text);
        label.setFont(label.getFont().deriveFont(Font.BOLD, 40f));
        JPanel centerPanel = new JPanel(new GridBagLayout());
        centerPanel.setPreferredSize(new Dimension(600, 300));
        centerPanel.add(label);

        JButton okBtn = new JButton("OK");
        okBtn.addActionListener(e -> {
            // get the window that holds this JButton
            Window win = SwingUtilities.getWindowAncestor((Component) e.getSource());
            // now close/dispose of it
            win.dispose();
        });
        JPanel btnPanel = new JPanel();
        btnPanel.add(okBtn);

        JDialog dialog = new JDialog(null, text, ModalityType.APPLICATION_MODAL);
        dialog.add(centerPanel, BorderLayout.CENTER);
        dialog.add(btnPanel, BorderLayout.PAGE_END);
        dialog.pack();
        dialog.setLocationByPlatform(true);
        dialog.setVisible(true);
    }
}

Обратите внимание, что модальные диалоги - это то, как JOptionPanes работает, чтобы остановить программупоток, пока диалог не был обработан.Здесь мы просто делаем вещи более напрямую.

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