У меня есть 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
? 'setVisible (false)'? 'Распоряжаться()'? Вы знаете, что куча JFrames в программе обычно является признаком программы новичков и часто предполагает, что дизайн может выиграть от изменений. Вместо этого, почему бы не изменить вид с помощью CardLayout. Или, если вам нужно модальное окно, используйте модальный JDialog. –
См. [Использование нескольких JFrames, Good/Bad Practice?] (Http://stackoverflow.com/q/9554636/418556). Лучшим вариантом было бы использовать «CardLayout», см. [Как использовать CardLayout] (http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html) для получения более подробной информации. – MadProgrammer
Для лучшей помощи, отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный проверяемый пример) или [SSCCE] (http://www.sscce.org/) (Short, Self Contained, Correct Example). –