Java Swing组件-禁用在布局中调整大小
我有一个定制的GUI组件,它基于Swing的JPanel。此组件放置在使用BorderLayout的JFrame中。当我调整框架的大小时,该组件会不断调整大小。我怎样才能避免这种情况?无论发生什么情况,我都希望组件保持相同的大小。我尝试过setSize、setPreferredSize、setMinimumSize,但没有成功 提前谢谢Java Swing组件-禁用在布局中调整大小,java,swing,user-interface,layout,resize,Java,Swing,User Interface,Layout,Resize,我有一个定制的GUI组件,它基于Swing的JPanel。此组件放置在使用BorderLayout的JFrame中。当我调整框架的大小时,该组件会不断调整大小。我怎样才能避免这种情况?无论发生什么情况,我都希望组件保持相同的大小。我尝试过setSize、setPreferredSize、setMinimumSize,但没有成功 提前谢谢 M您有几个选择: 使用不会调整组件大小的LayoutManager将组件嵌套在内部面板中 使用比BorderLayout更复杂的布局管理器。在我看来,Grid
M您有几个选择:
- 使用不会调整组件大小的
将组件嵌套在内部面板中LayoutManager
- 使用比
更复杂的布局管理器。在我看来,BorderLayout
更适合您的需要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);
}
}
结果:
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中。中间,红色组件保持首选大小。如果使用自定义布局管理器,请将当前布局更改为GridBagLayout,并将填充选项更改为无,之后,将其更改回第一个布局。在许多布局上,布局管理器无法控制其大小。“无论发生什么情况,我都希望组件保持相同的大小”hmmm是您将JPanel添加到JScrollPane以获得最小的大小,我引用,“例如,如果正在讨论的组件放在BorderLayout.CENTER中,那么这将不起作用。无论这些值如何,组件都将调整大小。“:)哦,我现在明白了,我不想直接使用或将组件添加到border layout center,但现在尝试使用任何其他布局(如flowlayout)创建新的JPanel,将该组件添加到新创建的flowlayout中,并将新创建的面板添加到border layout面板的中心,它不会在borderlayout面板内调整组件的大小。是的,正如您所说,最好是寻找另一个接受最小/最大大小的LayoutManager,使用SetSize确实是错误的示例,请删除您的添加code@little小兔子,没问题。作为记录,10k+用户可以看到已删除的帖子,因此您可以在删除之前将此评论放在您自己的答案下面。