Swing/OneTouchExpandable のバックアップ差分(No.5)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/OneTouchExpandable へ行く。
- 1 (2010-07-05 (月) 01:22:49)
- 2 (2010-07-05 (月) 02:53:37)
- 3 (2010-07-05 (月) 15:32:16)
- 4 (2010-07-26 (月) 06:07:27)
- 5 (2012-02-21 (火) 08:06:33)
- 6 (2012-02-21 (火) 17:15:21)
- 7 (2012-02-22 (水) 18:41:04)
- 8 (2012-07-18 (水) 11:04:29)
- 9 (2012-12-29 (土) 07:39:05)
- 10 (2013-07-26 (金) 01:03:41)
- 11 (2014-10-25 (土) 23:49:53)
- 12 (2014-11-01 (土) 00:46:09)
- 13 (2015-11-22 (日) 14:01:46)
- 14 (2016-05-28 (土) 18:21:06)
- 15 (2017-08-15 (火) 14:40:07)
- 16 (2017-08-16 (水) 17:33:26)
- 17 (2017-11-02 (木) 15:34:40)
- 18 (2018-06-27 (水) 19:28:46)
- 19 (2018-11-02 (金) 19:34:31)
- 20 (2020-11-03 (火) 00:14:59)
- 21 (2022-08-20 (土) 22:15:25)
- 22 (2022-09-16 (金) 11:14:31)
- 23 (2022-11-30 (水) 07:10:22)
- 24 (2023-07-20 (木) 13:08:48)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:JSplitPaneのディバイダを展開、収納する #navi(../) RIGHT:Posted by [[terai]] at 2010-07-05 RIGHT:Posted by [[aterai]] at 2010-07-05 *JSplitPaneのディバイダを展開、収納する [#u9e01565] JSplitPaneのディバイダをマウスのクリックなどで一気に展開、収納できるように設定します。 -&jnlp; -&jar; -&zip; #screenshot //#screenshot #ref(http://lh4.ggpht.com/_9Z4BYR88imo/TQTQl4nQ4PI/AAAAAAAAAf0/y7DMbOexVWs/s800/OneTouchExpandable.png) **サンプルコード [#f93229db] #code{{ JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, s1, s2); splitPane.setOneTouchExpandable(true); }} **解説 [#b1964ebf] 上記のサンプルでは、JSplitPane#setOneTouchExpandable(true)と設定することで、ディバイダにJButtonが表示され、これらをクリックすることでディバイダを展開、収納することができるようになっています。 ---- 初期状態でディバイダを収納状態にする場合、Java 1.5以降では、splitPane.setDividerLocation(0);などとするだけではダメ((JSplitPane自体をリサイズすると、収納されているコンポーネントの最小サイズ(setMinimumSize)まで勝手に展開され))で、以下のような設定をする必要があります。 -Web Startで起動しなかった場合 --[[Bug ID: 5006095 Need a way to programmatically stick JSplitPane divider under j2sdk 1.5>http://bugs.sun.com/view_bug.do?bug_id=5006095]] #code{{ try { splitPane.setDividerLocation(0); Method setKeepHidden = BasicSplitPaneUI.class.getDeclaredMethod( "setKeepHidden", new Class[] { Boolean.class }); setKeepHidden.setAccessible(true); setKeepHidden.invoke(splitPane.getUI(), new Object[] { Boolean.TRUE }); }catch(Exception e) { e.printStackTrace(); } }} Java 1.5 以降でJSplitPane#setDividerLocation(0);などとしてディバイダを収納状態にした場合、JSplitPane自体をリサイズすると収納されているコンポーネントの最小サイズ(setMinimumSize)まで展開されてしまいます。 -Web Startで起動した場合 --dividerから直接JButton(名前がついていない……)を取得し実行 #code{{ EventQueue.invokeLater(new Runnable() { @Override public void run() { Container divider = ((BasicSplitPaneUI)splitPane.getUI()).getDivider(); for(Component c: divider.getComponents()) { if(c instanceof JButton) { ((JButton)c).doClick(); break; } } } }); }} -収納状態を維持したい場合、リフレクションを使って、BasicSplitPaneUI#setKeepHidden(true)メソッドを実行したり、Dividerに表示されているJButtonを取得実行する方法があります。 --[http://bugs.sun.com/view_bug.do?bug_id=5006095 Bug ID: 5006095 Need a way to programmatically stick JSplitPane divider under j2sdk 1.5] --[[Swing/KeepHiddenDivider]] ---- HOMEキーやENDキー(F8キーなどでdividerにフォーカスを移動した状態で)を押して展開、収納する方法では、divider中のJButtonを押して展開、収納した場合と動作が異なります。 -HOMEキー、ENDキーで展開、収納 --前回の状態に一旦戻らずに展開、収納される --JSplitPane自体をリサイズすると、収納されているコンポーネントの最小サイズ(setMinimumSize)まで勝手に展開される ---JSplitPane#getActionMap()#get("selectMin")などで取得できるActionでは、setKeepHidden(boolean)が使われていない **参考リンク [#leece45e] -[[Bug ID: 5006095 Need a way to programmatically stick JSplitPane divider under j2sdk 1.5>http://bugs.sun.com/view_bug.do?bug_id=5006095]] -[http://bugs.sun.com/view_bug.do?bug_id=5006095 Bug ID: 5006095 Need a way to programmatically stick JSplitPane divider under j2sdk 1.5] **コメント [#m26676c6] #comment