在布局中重新分配时 JPanel 的存在
Existence of JPanel when reassigned in layout
我写了这个快速示例,看看当 BorderLayout
中的某个区域的值与新内容叠加(或替换?)时会发生什么。
import java.awt.*;
import javax.swing.*;
public class Test {
public static void main(String[] args) {
JPanel add1 = new JPanel();
add1.setBackground(Color.RED);
JPanel add2 = new JPanel();
add2.setBackground(Color.DARK_GRAY);
JPanel pane = new JPanel();
pane.setLayout(new BorderLayout());
pane.add(add1, BorderLayout.NORTH);
pane.add(add2, BorderLayout.NORTH);
JFrame main = new JFrame();
main.setContentPane(pane);
main.setPreferredSize(new Dimension(300,300));
main.setLocation(200,300);
main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
main.setResizable(false);
main.setVisible(true);
main.pack();
}
}
我想知道当 BorderLayout.NORTH
被重新分配时 add1
会发生什么?垃圾收集器会处理吗?
我假设不会,因为 class Test
中仍然有对 add1
的引用,但是我不确定它是否仍被视为 JFrame 的一部分。如果我要替换 BorderLayout.NORTH
,是否需要将 add1
设置为 null
?我想我想问的是布局引用是否被替换,新值是否叠加到该位置,或者旧值是否被完全替换因此不再是 JFrame 的一部分。
根据大多数类似的问题,Java API 包含答案。这里 BorderLayout API 具体说明(突出显示我的):
A border layout lays out a container, arranging and resizing its components to fit in five regions: north, south, east, west, and center. Each region may contain no more than one component, and is identified by a corresponding constant: NORTH, SOUTH, EAST, WEST, and CENTER.
因此,通过向 NORTH 部分添加一个新组件,您 取代了 旧组件,并且它不再是 GUI 的一部分。
我写了这个快速示例,看看当 BorderLayout
中的某个区域的值与新内容叠加(或替换?)时会发生什么。
import java.awt.*;
import javax.swing.*;
public class Test {
public static void main(String[] args) {
JPanel add1 = new JPanel();
add1.setBackground(Color.RED);
JPanel add2 = new JPanel();
add2.setBackground(Color.DARK_GRAY);
JPanel pane = new JPanel();
pane.setLayout(new BorderLayout());
pane.add(add1, BorderLayout.NORTH);
pane.add(add2, BorderLayout.NORTH);
JFrame main = new JFrame();
main.setContentPane(pane);
main.setPreferredSize(new Dimension(300,300));
main.setLocation(200,300);
main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
main.setResizable(false);
main.setVisible(true);
main.pack();
}
}
我想知道当 BorderLayout.NORTH
被重新分配时 add1
会发生什么?垃圾收集器会处理吗?
我假设不会,因为 class Test
中仍然有对 add1
的引用,但是我不确定它是否仍被视为 JFrame 的一部分。如果我要替换 BorderLayout.NORTH
,是否需要将 add1
设置为 null
?我想我想问的是布局引用是否被替换,新值是否叠加到该位置,或者旧值是否被完全替换因此不再是 JFrame 的一部分。
根据大多数类似的问题,Java API 包含答案。这里 BorderLayout API 具体说明(突出显示我的):
A border layout lays out a container, arranging and resizing its components to fit in five regions: north, south, east, west, and center. Each region may contain no more than one component, and is identified by a corresponding constant: NORTH, SOUTH, EAST, WEST, and CENTER.
因此,通过向 NORTH 部分添加一个新组件,您 取代了 旧组件,并且它不再是 GUI 的一部分。