Java Swing Boxlayout:具有不同大小的面板(彼此比例)



我正在尝试创建一个包含另外 2 个面板的框布局面板,其中一个面板的大小仅为另一个面板的一半(因此比例为 1/3 到 2/3)。设置首选大小似乎不起作用,我一直无法找到任何其他方法(以下代码主要是使用 Windowbuilder 生成的,所以如果有点混乱,请道歉):

public class GUIControls extends JFrame implements IGUIControls {
    private JTextField textField;
    private int posX=0,posY=0;
    public GUIControls() {
        getContentPane().setBackground(Color.WHITE);
        getContentPane().setLayout(new CardLayout(0, 0));
        JPanel rootPanel = new JPanel();
        rootPanel.setBorder(new LineBorder(new Color(0, 0, 255), 1, true));
        rootPanel.setBackground(Color.WHITE);
        getContentPane().add(rootPanel, "name_25253210045969");
        rootPanel.setLayout(new BoxLayout(rootPanel, BoxLayout.X_AXIS));
        rootPanel.setPreferredSize(new Dimension(600, 400));
        JPanel menuLeft = new JPanel();
        rootPanel.add(menuLeft);
        menuLeft.setBackground(Color.WHITE);
        menuLeft.setLayout(null);
        menuLeft.setPreferredSize(new Dimension((1/3)*rootPanel.getWidth(), rootPanel.getHeight()));
        JPanel contentRight = new JPanel();
        rootPanel.add(contentRight);
        contentRight.setBackground(Color.WHITE);
        contentRight.setPreferredSize(new Dimension((2/3)*rootPanel.getWidth(), rootPanel.getHeight()));
        contentRight.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent arg0) {
                CardLayout cardLayout = (CardLayout) getContentPane().getLayout();
                cardLayout.show(getContentPane(), "name_36737116256884");
            }
        });
        contentRight.setLayout(null);
        setUndecorated(true);   
        addMouseListener(new MouseAdapter()
        {
           public void mousePressed(MouseEvent e)
           {
              posX=e.getX();
              posY=e.getY();
           }
        });
        addMouseMotionListener(new MouseAdapter()
        {
             public void mouseDragged(MouseEvent evt)
             {
                //sets frame position when mouse dragged            
                setLocation (evt.getXOnScreen()-posX,evt.getYOnScreen()-posY);
             }
        });
    }
    public void runGUI(){
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                GUIControls guiControls = new GUIControls();
                guiControls.pack();
                guiControls.setLocationRelativeTo(null);
                guiControls.setSize(600, 400);
                guiControls.setVisible(true);
            }
        });
    }
}

有谁知道我会怎么做?

谢谢。

您可以尝试使用 GridBagLayout .有关详细信息,请阅读 Swing 教程中有关如何使用 GridBagLayout 的部分。我猜你需要玩weightx属性。

或者,您可以使用专门为执行此操作而设计的相对布局。

编辑:

你做了任何调试吗?添加以下内容时会发生什么情况:

System.out.println(menuLeft.getPreferredSize());
System.out.println(contentRight.getPreferredSize());

您有两个问题:

  1. 1/3 的值是多少?您需要修复尺寸计算。
  2. 您的根面板的大小是多少?在组件显示在可见 GUI 上之前,组件没有大小。您可以设置组件的首选大小。

相关内容

  • 没有找到相关文章

最新更新