2014-11-22 4 views
1

У меня есть jframe как часть программы, где пользователь заполняет arraylist, нажимая кнопки добавления. Когда они закончат заполнение arraylist, я хочу, чтобы они нажали кнопку done, чтобы скрыть jframe, пока программа продолжает работать.Скрытие 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)'? 'Распоряжаться()'? Вы знаете, что куча JFrames в программе обычно является признаком программы новичков и часто предполагает, что дизайн может выиграть от изменений. Вместо этого, почему бы не изменить вид с помощью CardLayout. Или, если вам нужно модальное окно, используйте модальный JDialog. –

+2

См. [Использование нескольких JFrames, Good/Bad Practice?] (Http://stackoverflow.com/q/9554636/418556). Лучшим вариантом было бы использовать «CardLayout», см. [Как использовать CardLayout] (http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html) для получения более подробной информации. – MadProgrammer

+0

Для лучшей помощи, отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный проверяемый пример) или [SSCCE] (http://www.sscce.org/) (Short, Self Contained, Correct Example). –

ответ

1

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

Смежные вопросы