JSplitPaneでディバイダの移動を連続的に再描画
Total: 6464
, Today: 1
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
二つのJSplitPane
のディバイダで、移動の同期と連続的な再描画を行います。
Screenshot
Advertisement
サンプルコード
JSplitPane leftPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
JSplitPane rightPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
JSplitPane centerPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
leftPane.setTopComponent(new JScrollPane(new JTextArea("aaaaaaa")));
leftPane.setBottomComponent(new JScrollPane(new JTextArea("bbbb")));
rightPane.setTopComponent(new JScrollPane(new JTree()));
rightPane.setBottomComponent(new JScrollPane(new JTree()));
centerPane.setLeftComponent(leftPane);
centerPane.setRightComponent(rightPane);
leftPane.setResizeWeight(.5);
rightPane.setResizeWeight(.5);
centerPane.setResizeWeight(.5);
PropertyChangeListener pcl = new PropertyChangeListener() {
@Override public void propertyChange(PropertyChangeEvent e) {
if (JSplitPane.DIVIDER_LOCATION_PROPERTY.equals(e.getPropertyName())) {
JSplitPane source = (JSplitPane) e.getSource();
int location = ((Integer) e.getNewValue()).intValue();
JSplitPane target = (source == leftPane) ? rightPane : leftPane;
if (location != target.getDividerLocation())
target.setDividerLocation(location);
}
}
};
leftPane.addPropertyChangeListener(pcl);
rightPane.addPropertyChangeListener(pcl);
View in GitHub: Java, Kotlin解説
上記のサンプルでは、各JSplitPane
にJSplitPane#setContinuousLayout(true)
を設定し、ディバイダの移動に応じて子コンポーネントを連続的に再描画しています。
JSplitPane
を3
つ使用し4
つに分割された領域を表示- 左右に配置されたディバイダがマウスのドラッグに同期して移動するように以下を設定
- 片方のディバイダが上下移動したら残りも移動するように
PropertyChangeListener
を追加 JSplitPane#setContinuousLayout(true)
を設定して移動を連続的に再描画
- 片方のディバイダが上下移動したら残りも移動するように