Java 如何根据容器动态设置组件扩展属性';s宽度

Java 如何根据容器动态设置组件扩展属性';s宽度,java,swing,layout,Java,Swing,Layout,我需要建立一个面板,其中包含2个内部面板,从左到右排序,具有固定的高度和不同的宽度。 宽度扩展,或者换句话说,x填充宽度,取决于父容器的宽度。 场景是,在父容器的某个宽度内,我只希望右面板填充所需的水平空间,从该宽度到更大的宽度,只希望左面板展开,依此类推 我尝试了两种方法-切换两个子面板的GridBagConstraints,或者使用BorderLayout删除子面板,并使用相应的BorderLayout.CENTER重新添加子面板,或BorderLayout.EAST(或west)。 通过将

我需要建立一个面板,其中包含2个内部面板,从左到右排序,具有固定的高度和不同的宽度。 宽度扩展,或者换句话说,x填充宽度,取决于父容器的宽度。 场景是,在父容器的某个宽度内,我只希望右面板填充所需的水平空间,从该宽度到更大的宽度,只希望左面板展开,依此类推

我尝试了两种方法-切换两个子面板的
GridBagConstraints
,或者使用
BorderLayout
删除子面板,并使用相应的
BorderLayout.CENTER
重新添加子面板,或
BorderLayout.EAST
(或west)。 通过将
ComponentAdapter
添加到父容器中,使用
ComponentResized
调用,在计算结果宽度间隔时进行切换。 问题是,调整大小事件不是连续的-例如,我接收宽度为317、322、330的事件,不一定是所有介于两者之间的数字的事件,并且只有在调整组件大小并绘制之后才会触发。
当我们看到面板扩展到不应该的宽度时,这会导致非常恼人的闪烁


提前感谢您的帮助。

您可以使用JSplitPane。检查此代码:

import java.awt.EventQueue;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JSplitPane;

public class test extends JFrame {

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    test frame = new test();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public test() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);

        JSplitPane splitPane = new JSplitPane();
        setContentPane(splitPane);      
        splitPane.setBorder(null);  

    }

}

您是否可以尝试为组件定义最大Widt,并使用具有适当权重的GridBagLayout Xtanks@StanislavL,但这需要为父容器的每个不同宽度间隔重置最大宽度-这意味着我仍需要使用ComponentListener,事件将触发得太晚。。。在所描述的场景中,所需的最大宽度也会根据容器的宽度进行更改(例如,当容器的宽度为0-200 px时,左侧面板不会水平扩展,200-400它会,400+它不会再次扩展…)谢谢@Arijit,但我如何以有用的方式使用JSplitPane?我需要动态更改子面板扩展属性。。。