如何使右侧的JPanel始终显示

how to make a right side JPanel display always

我在一行中有两个 Jpanel,第一个 JPanel 用于显示多个按钮,第二个用于显示左右按钮。 我想始终显示左右按钮(当更改屏幕大小时)

    public class TestJPanel {
public static void main(String... args) {
    JFrame frame = new JFrame();
    JPanel panel = new JPanel();
    for (int i = 0; i < 10; i++) {
        panel.add(new JButton("Hello-" + i));
    }
    JPanel leftrightPanel=new JPanel();
    leftrightPanel.add(new Button("LEFT"));
    leftrightPanel.add(new Button("RIGHT"));
    JPanel contentPane = new JPanel();
    contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.LINE_AXIS));
    contentPane.add("West",panel);
    contentPane.add("East",leftrightPanel);
    frame.setContentPane(contentPane);
    frame.pack();
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.setSize(400,280);
    frame.setVisible(true);
}}

根据 JavaDoc,您用于 String, Componentadd 方法已过时。不管怎样,String参数只是组件的名称,与定位无关。就像现在一样,组件的放置完全按照您的规定:沿水平轴。如果你想改变它,你可以做很多事情,比如修改内部 JPanels 的布局,为内容面板使用 BorderLayout 并将内部面板添加到适当的位置索引等。

当您说您希望最右侧的面板和按钮始终可见时,您需要指定左侧面板及其按钮的行为。他们应该占用多行吗?他们应该被隐藏吗?他们应该收缩吗?如果你明确你想要发生什么,我可以给你一个更具体的答案,但现在,答案很简单,它正在做你告诉它的事情。

补充说明,您使用的 JButtonsButtons 不一致。使用一个或另一个,最好是 JButtons,因为您使用的每个其他组件都是 Swing。

也许你想要这样的东西:

JPanel contentPane = new JPanel();
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.LINE_AXIS));
contentPane.add(panel);
contentPane.add(Box.createHorizontalGlue());
contentPane.add(leftrightPanel);

这会将两个面板分隔到屏幕的左侧和右侧,中间 space。中间的 space 会随着框架的大小改变而变化。

contentPane.add("West",panel);

切勿使用这样的硬编码魔术字符串。 API 将提供一个字段供您使用。当您正确使用 BorderLayout 时,您将使用:

contentPane.add(panel, BorderLayout.LINE_START);

阅读 How to Use BorderLayout 上的 Swing 教程,了解有关使用约束和正确的 add(...) 方法的更多信息和工作示例。