如何根据容器的宽度动态设置组件扩展属性

时间:2014-05-13 14:10:44

标签: java swing layout

我需要建造一个包含2个内部面板的面板,从左到右排列,高度固定,宽度不一。 宽度扩展,换句话说 - x填充wight,取决于父容器的宽度。 场景是父容器的某个宽度,我只希望右面板填充它所需的水平空间,从那个宽度到更大的宽度,只有左面板要扩展,依此类推。

我尝试了两种方法 - 切换2个子面板中的GridBagConstraints,或使用BorderLayout并类似地移除子项并使用相应的BorderLayout.CENTER重新添加它们以用于展开的组件,或BorderLayout.EAST(或西)。 此切换将在计算结果宽度间隔时,通过将ComponentResized调用添加到父容器来使用ComponentAdapter调用。 问题是调整大小事件不是顺序的 - 例如我收到宽度事件:317,322,330,不一定是两者之间的所有数字,只有在组件调整大小和绘制后才触发。 当我们看到面板扩展到它不应该的宽度时,这会导致非常恼人的闪烁。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用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);  

    }

}