两个组件,一个具有设置的宽度

Two Components, one with a set width

这似乎是一个完全初级的问题,但我是 swing 的初学者。我有一个可调整大小的 JFrame,左边是 JPanel,右边是 JTabbedPane。我希望 JTabbedPane 具有恒定宽度并增加高度以匹配 JFrame 高度。 JPanel 应填充 JFrame 的剩余宽度和高度。我在这里做错了什么?

public Example()
{       
    f = new JFrame();

    f.setResizable(true);

    f.setPreferredSize(new Dimension(1000, 800));

    f.setLayout(new FlowLayout());

    JPanel viewerPanel = new JPanel()
    {
        @Override
        protected void paintComponent(Graphics g) 
        {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g;
            g2d.setColor(Color.RED);
            System.out.println("W:" + getSize().width + ", H:" + getSize().height);
            g2d.fillRect(0, 0, getSize().width, getSize().height);
        }
    };  

    f.getContentPane().add(viewerPanel);

    JTabbedPane tabs = new JTabbedPane();
    tabs.setSize(400, f.getHeight());

    tabs.addTab("Tab1", new JLabel("Content1"));
    tabs.addTab("Tab2", new JLabel("Content2"));
    tabs.addTab("Tab3", new JLabel("Content3"));
    tabs.addTab("Tab4", new JLabel("Content4"));

    f.getContentPane().add(tabs);

    f.pack();

    f.setVisible(true);     
}

最好的方法是让布局完成工作并设置首选或最小尺寸:

尝试使用 BorderLayout 并将面板添加到中心(高度和宽度都增加)并将 tabbedPane 添加到右侧(高度增加),同时为 tabbedPane 设置首选或最小尺寸

你的 tabbedPane 应该总是有相同的,而面板会根据留给他的大小而增长