gpt4 book ai didi

java - 使用BorderLayout时如何控制JPanel setSize

转载 作者:行者123 更新时间:2023-11-30 09:21:53 27 4
gpt4 key购买 nike

我有一个用于主要 JFrameComponentListener,它在调整大小时发送一个事件,但在事件被触发时,Jpanel 已调整大小。

public class Test implements ComponentListener {
private JFrame frame;
private JPanel panel;

public Test() {
frame = new JFrame();
panel = new JPanel();

frame.setPreferredSize(new Dimension(300, 300));
frame.getContentPane().add(panel, BorderLayout.CENTER);
frame.addComponentListener(this);

frame.pack();
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
Test test = new Test();
test.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

@Override
public void componentResized(ComponentEvent e) {
System.out.println(frame.getSize() + " : " + panel.getSize());
frame.revalidate();
}

@Override
public void componentHidden(ComponentEvent e) {}

@Override
public void componentMoved(ComponentEvent e) {}

@Override
public void componentShown(ComponentEvent e) {}
}

如何在 JFrame 调整大小时控制 JPanel setSize

编辑:我理解 BorderLayout 设置组件来填充边框。它如何设置组件的大小?它调用 setSize 吗?如果是,为什么调用覆盖的 setSize?

最佳答案

将组件添加到 LayoutManager 控制下的容器时,您无法直接控制组件大小。这违背了使用布局管理器的目的。

如果您希望在组件大小发生变化时得到通知,请将 ComponentListener 添加到组件(而不是容器)。

关于java - 使用BorderLayout时如何控制JPanel setSize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16737587/

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