У меня есть несколько элементов GUI, добавленных в JPanel. JPanel добавляется в JScrollPane. JScrollPane добавляется в JFrame (раздел CENTER BorderLayout).Утилизация элементов GUI
Иногда мне нужно удалить JScrollPane и сделать пространство доступным для других элементов. Я предоставил для этого метод. Хотите убедиться, что этот метод использует все ресурсы, используемые старым JScrollPane, и делает их доступными для Garbage Collection. См. Код ниже. Является ли мой метод clearCenter()
достаточным для выполнения этой задачи? Есть ли лучший способ сделать это?
Спасибо.
import java.awt.*;
import javax.swing.*;
public class MyGui extends JFrame {
private JScrollPane scroll;
private JPanel panel;
private JButton button1;
private JButton button2;
private JButton button3;
private JButton button4;
// Constructor
public MyGui() {
super("Playback");
setSize(250, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BorderLayout layout = new BorderLayout();
setLayout(layout);
panel = new JPanel();
GridLayout grid = new GridLayout(0, 1, 30, 30);
panel.setLayout(grid);
button1 = new JButton("Button1");
button2 = new JButton("Button2");
button3 = new JButton("Button3");
button4 = new JButton("Button4");
panel.add(button1);
panel.add(button2);
panel.add(button3);
panel.add(button4);
scroll = new JScrollPane(panel,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
add(scroll, BorderLayout.CENTER);
add(new JLabel("South", JLabel.CENTER),BorderLayout.SOUTH);
add(new JLabel("North", JLabel.CENTER),BorderLayout.NORTH);
add(new JLabel("East", JLabel.CENTER),BorderLayout.EAST);
add(new JLabel("West", JLabel.CENTER),BorderLayout.WEST);
setVisible(true);
}
public void clearCenter() {
button1 = null;
button2 = null;
button3 = null;
button4 = null;
panel = null;
remove(scroll);
scroll = null;
}
}
Thanks. Если не слишком много проблем, можете ли вы наметить шаги, необходимые для очистки и перезагрузки JScrollPlane новым контентом? –
См. Редактирование ... –
Будет стремиться предоставить MCVE в будущем. Не хотел загромождать мой вопрос дополнительными классами или файлами, чтобы уйти. Я изучаю вашу технику нереста нового потока прямо изнутри 'main()'. Я видел, что вы использовали ту же технику в примере кода «CardLayout», на который вы ссылались. Мой единственный вопрос - что означает «новый Runnable()»? Поскольку «Runnable» является интерфейсом, а не классом (и я не вижу ключевое слово «реализует»), как создается фактический объект, созданный из этого утверждения? Спасибо за вашу снисходительность. –