gpt4 book ai didi

java - 在布局中重新分配时 JPanel 的存在

转载 作者:行者123 更新时间:2023-12-01 18:06:37 26 4
gpt4 key购买 nike

我编写了这个快速示例,看看当 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 会发生什么?垃圾收集器会处理它吗?

我认为不会,因为 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 的一部分。

关于java - 在布局中重新分配时 JPanel 的存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35953748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com