Скрытие JFrame при нажатии кнопки без остановки программы

1

У меня есть jframe как часть программы, где пользователь будет заполнять arraylist, нажимая кнопки добавления. Когда они закончат заполнение arraylist, я хочу, чтобы они нажали кнопку done, чтобы скрыть jframe, пока программа продолжает работать.

Есть ли способ сделать это. Первоначально я использовал System.exit(0), но это, похоже, завершает работу программы.

public class Street extends JFrame {
    private static final Random randomNumbers = new Random();
    private ArrayList<Vehicle> vehicles = new ArrayList<Vehicle>();

    private JLabel messageJLabel; // displays vehicle that was added
    private JButton addBicycleJButton;
    private JButton addCarJButton;
    private JButton doneJButton;
    private Color background; // background color of application

public Street() {

    super("Street Simulation");

    background = Color.LIGHT_GRAY;

    messageJLabel = new JLabel("No vehicles added.");

    addBicycleJButton = new JButton("Add Bicycle");
    addBicycleJButton.addActionListener(

    new ActionListener() // anonymous inner class
            {
                public void actionPerformed(ActionEvent e) {
                    background = Color.LIGHT_GRAY;
                    Bicycle b = new Bicycle(2, 0);
                    vehicles.add(b);
                    messageJLabel.setText(b.toString()
                            + " added to vehicles");
                    repaint();

                } // end method actionPerformed
            } // end anonymous inner class
            ); // end call to addActionListener
    addCarJButton = new JButton("Add Car");
    addCarJButton.addActionListener(

    new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            background = Color.LIGHT_GRAY;
            Car c = new Car(4, 0);
            vehicles.add(c);
            messageJLabel.setText(c.toString() + " added to vehicles");
            repaint();

        } // end method actionPerformed
    } // end anonymous inner class
            );// end call to addActionListener

    doneJButton = new JButton("Done");
    doneJButton.addActionListener(

    new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            // code to exit goes here
            background = Color.LIGHT_GRAY;

            //I would like to have the jframe running in the background after this button is pushed.

            // System.exit(0);
            repaint();

        } // end method actionPerformed
    } // end anonymous inner class
            );// end call to addActionListener

    setLayout(new FlowLayout());
    add(addBicycleJButton);
    add(addCarJButton);
    add(doneJButton);

    add(messageJLabel);

} // end street constructor
  • 1
    ? setVisible(false) ? dispose() ? Вы знаете, что наличие множества JFrames в программе обычно является признаком программы новичка, и часто предполагает, что дизайн может выиграть от изменений. Вместо этого, почему бы не изменить представление, используя CardLayout. Или, если вам нужно модальное окно, используйте модальный JDialog.
  • 2
    См . Использование нескольких JFrames, хорошая / плохая практика? , Лучшим дизайном было бы использовать CardLayout , подробнее см. Как использовать CardLayout.
Показать ещё 2 комментария
Теги:
user-interface
swing
jframe

2 ответа

1

См . Использование нескольких JFrames, Хорошая/Плохая Практика? по причинам, почему вы не должны избегать текущих разработок и мышления.

Лучшим вариантом было бы использовать CardLayout, см. " Как использовать CardLayout" для более подробной информации

1

Класс JFrame имеет метод setVisible(boolean) который можно использовать для изменения видимости JFrame. Например, this.setVisible(false); чтобы скрыть это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню