状态: 我想显示2个JPanels,其中包含使用JSplitPane的图像(顶部一个图像,底部一个图像)
当我移动窗格的分隔符时,我希望两个面板都相应地调整大小。 (图像占用最大可能空间)
问题: 我正在使用PropertyChangeListener来跟踪分隔符的位置变化,但事件似乎在实际“重绘”之前被触发了?窗户已经发生了
我尝试了什么: - 在读取尺寸之前重新绘制组件
最低工作示例:
public class Main {
public static void main(String argv[]) {
MyFrame f = new MyFrame();
}
}
class MyFrame extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
JPanel anyPanel, anyPanel2;
JSplitPane p;
public MyFrame() {
PropertyChangeListener resizeHandler = new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
System.out.println(anyPanel.getHeight());
}
};
anyPanel = new JPanel();
anyPanel2 = new JPanel();
p = new JSplitPane(JSplitPane.VERTICAL_SPLIT, anyPanel, anyPanel2);
p.addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY, resizeHandler);
getContentPane().add(p);
this.add(p);
this.pack();
this.setVisible(true);
}
}
答案 0 :(得分:2)
您需要添加到构造函数
p.setContinuousLayout(true);