我有一个基于Swing的JPanel的自定义GUI组件。该组件放置在使用BorderLayout的JFrame中。当我调整窗口大小时,该组件会随之调整大小。我应该怎么做才能避免这种情况?我希望无论发生什么情况,该组件都保持相同的大小。我已经尝试使用setSize、setPreferredSize和setMinimumSize,但都没有成功。
提前感谢!
M
提前感谢!
M
将组件嵌套在一个内部面板中,并使用一个不调整你的组件大小的LayoutManager
使用比BorderLayout
更复杂的LayoutManager
。我认为GridBagLayout
更适合你的需要。
第一种解决方案示例:
import java.awt.*;
import javax.swing.*;
public class FrameTestBase extends JFrame {
public static void main(String args[]) {
FrameTestBase t = new FrameTestBase();
JPanel mainPanel = new JPanel(new BorderLayout());
// Create some component
JLabel l = new JLabel("hello world");
l.setOpaque(true);
l.setBackground(Color.RED);
JPanel extraPanel = new JPanel(new FlowLayout());
l.setPreferredSize(new Dimension(100, 100));
extraPanel.setBackground(Color.GREEN);
// Instead of adding l to the mainPanel (BorderLayout),
// add it to the extra panel
extraPanel.add(l);
// Now add the extra panel instead of l
mainPanel.add(extraPanel, BorderLayout.CENTER);
t.setContentPane(mainPanel);
t.setDefaultCloseOperation(EXIT_ON_CLOSE);
t.setSize(400, 200);
t.setVisible(true);
}
}
结果:
绿色组件位于BorderLayout.CENTER
,红色组件保持首选大小。
//this will restrict size on fix size, what ever size you will define for panel like
//panel.setSize(400,400);
panel.setMaximumSize(panel.getSize());
panel..setMinimumSize(panel.getSize());
如果您正在使用自定义布局管理器,请将当前布局更改为GridBagLayout,并将填充选项更改为NONE,然后将其改回到您的第一个布局。