Swing/ContinuousLayout のバックアップソース(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- バックアップ を表示
- Swing/ContinuousLayout へ行く。
- 1 (2012-12-29 (土) 07:33:42)
- 2 (2013-08-01 (木) 14:06:55)
- 3 (2013-08-17 (土) 01:09:13)
- 4 (2013-09-11 (水) 00:34:49)
- 5 (2014-10-25 (土) 23:48:10)
- 6 (2014-11-25 (火) 03:03:31)
- 7 (2015-02-14 (土) 10:17:07)
- 8 (2016-12-15 (木) 17:04:07)
- 9 (2017-12-06 (水) 14:02:18)
- 10 (2018-10-08 (月) 18:25:25)
- 11 (2020-10-03 (土) 14:12:15)
- 12 (2022-07-06 (水) 04:57:09)
TITLE:JSplitPaneでディバイダの移動を連続的に再描画 #navi(../) #tags(JSplitPane, PropertyChangeListener) RIGHT:Posted by &author(aterai); at 2010-07-12 *JSplitPaneでディバイダの移動を連続的に再描画 [#yf39f801] 二つの``JSplitPane``のディバイダで、移動の同期と連続的な再描画を行います。 -&jnlp; -&jar; -&zip; //#screenshot #ref(http://lh4.ggpht.com/_9Z4BYR88imo/TQTKL-SYs6I/AAAAAAAAAVk/pXv9HlMSLf0/s800/ContinuousLayout.png) **サンプルコード [#y4c52198] #code(link){{ final JSplitPane leftPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); final JSplitPane rightPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); final 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); }} **解説 [#wbd6d421] 上記のサンプルでは、``JSplitPane``を3つ使用して、4つのコンポーネントを分割表示しています。 ---- 左右に配置されたディバイダが、同期して移動するように以下のように設定しています。 -片方のディバイダが上下移動したら、残りも移動するように``PropertyChangeListener``を追加 -``JSplitPane#setContinuousLayout(true)``として、移動を連続的に再描画 **参考リンク [#nc7b83c6] - [https://forums.oracle.com/message/5816154 Regading SplitPanes | Oracle Forums] **コメント [#jad86396] #comment