我需要建造一个包含2个内部面板的面板,从左到右排列,高度固定,宽度不一。 宽度扩展,换句话说 - x填充wight,取决于父容器的宽度。 场景是父容器的某个宽度,我只希望右面板填充它所需的水平空间,从那个宽度到更大的宽度,只有左面板要扩展,依此类推。
我尝试了两种方法 - 切换2个子面板中的GridBagConstraints
,或使用BorderLayout
并类似地移除子项并使用相应的BorderLayout.CENTER
重新添加它们以用于展开的组件,或BorderLayout.EAST
(或西)。
此切换将在计算结果宽度间隔时,通过将ComponentResized
调用添加到父容器来使用ComponentAdapter
调用。
问题是调整大小事件不是顺序的 - 例如我收到宽度事件:317,322,330,不一定是两者之间的所有数字,只有在组件调整大小和绘制后才触发。
当我们看到面板扩展到它不应该的宽度时,这会导致非常恼人的闪烁。
提前感谢您的帮助。
答案 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);
}
}