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