java - SWING - сохранение данных после этого.

-5

поэтому в основном я создаю приложение Swing на Java, и у меня есть список, в котором пользователь может добавить элемент, введя текстовое поле и кнопку (когда пользователь нажмет эту кнопку, откроет окно и откроет новое окно). В новом окне у меня есть только кнопка, которая вернет меня в первое окно, но данные, вставленные в список delete. Есть ли способ избежать этого (я знаю, что есть, но если кто-то может объяснить мне, как это было бы здорово :)).

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

public class first extends JFrame {

public static final long serialVersionUID = 1L;

private JFrame frame;
private JButton button, button2;
private JComboBox box;
private JScrollPane scroll;
private DefaultListModel defListModel = new DefaultListModel();
private JList list;
private JPanel panel;
private JTextField field;

public First() {

try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch(Exception e) {
e.printStackTrace();
}

frame = new JFrame("Hello Eclipse");

panel = new JPanel();

field = new JTextField("", 25);
panel.add(field);

button = new JButton("Click to add to the list");
button.setFocusPainted(false);
button.setToolTipText("Hovered Over ME");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(e.getSource() == button){
String text = field.getText();
defListModel.addElement(text);
JOptionPane.showMessageDialog(frame, "Added to the list", "Done", JOptionPane.INFORMATION_MESSAGE);
}
}
});
panel.add(button);

button2 = new JButton("New Window");
button2.setFocusPainted(false);
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(e.getSource() == button2){
NewWindow window = new NewWindow();
frame.setVisible(false);

}
}
});
panel.add(button2);

String[] movies = {};

for(String movie : movies){
defListModel.addElement(movie);
}

list = new JList(defListModel);

list.setFixedCellWidth(150);
list.setFixedCellHeight(30);

scroll = new JScrollPane(list, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
panel.add(scroll);

frame.add(panel);
frame.setSize(400, 400);
frame.setVisible(true);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
frame.setLocationRelativeTo(null);
}

public static void main(String[] args) {
new First();
}

}

Заранее спасибо!

спросил(а) 2021-01-19T15:59:23+03:00 9 месяцев, 1 неделя назад
1
Решение
91

Вы можете использовать CardLayout для использования одинакового пространства для нескольких видов.

Подсказка: просто переключайтесь между несколькими JPanel когда нажимается JButton.

Узнайте больше о том, как использовать CardLayout

Если вы хотите придерживаться текущего подхода, попробуйте с WindowListener

frame.addWindowListener(new WindowAdapter() {
@Override
public void windowDeactivated(WindowEvent arg0) {
System.out.println("windowDeactivated");
// save the data
}
});

При необходимости переопределите windowClosing().

Вы можете переопределить метод setVisible() JFrame а также проверить видимость JFrame.

См . Использование нескольких JFrames, Хорошая/Плохая Практика?

Сомнение: почему используются оба расширения класса JFrame add, имеющие экземпляр JFrame в классе?

ответил(а) 2021-01-19T15:59:23+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема