Swing/OneTouchExpandable のバックアップの現在との差分(No.8)
TITLE:JSplitPaneのディバイダを展開、収納する
Posted by aterai at 2010-07-05
JSplitPaneのディバイダを展開、収納する
JSplitPaneのディバイダをマウスのクリックなどで一気に展開、収納できるように設定します。- category: swing folder: OneTouchExpandable title: JSplitPaneのディバイダを展開、収納する tags: [JSplitPane, Divider, ActionMap, ServiceManager, BasicService] author: aterai pubdate: 2010-07-05T01:22:49+09:00 description: JSplitPaneのディバイダをマウスのクリックなどで一気に展開、収納できるように設定します。 image:
概要
JSplitPane
のディバイダをマウスのクリックなどで一気に展開、収納できるように設定します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
サンプルコード
JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, s1, s2);
splitPane.setOneTouchExpandable(true);
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JSplitPane#setOneTouchExpandable(true)と設定することで、ディバイダにJButtonが表示され、これらをクリックすることでディバイダを展開、収納することができるようになっています。解説
上記のサンプルでは、JSplitPane#setOneTouchExpandable(true)
を設定するとディバイダにJButton
が2
つ表示され、これらをマウスでクリックするとJSplitPane
の展開、収納ができます。
- - Java 1.5 以降でJSplitPane#setDividerLocation(0);などとしてディバイダを収納状態にした場合、JSplitPane自体をリサイズすると収納されているコンポーネントの最小サイズ(setMinimumSize)まで展開されてしまいます。
-
Java 1.5
以降でJSplitPane#setDividerLocation(0);
などとしてディバイダを収納状態にした場合、JSplitPane
自体をリサイズすると収納されているコンポーネントの最小サイズ(setMinimumSize
)まで展開される - 収納状態を維持したい場合、リフレクションを使って
BasicSplitPaneUI#setKeepHidden(true)
メソッドを実行したりDivider
に表示されているJButton
を取得実行する方法がある - HOMEキーやENDキー(F8キーなどで
Divider
にフォーカスを移動した状態で)を押して展開、収納する方法ではDivider
中のJButton
を押して展開、収納した場合と動作が異なる- HOMEキー、ENDキーで展開、収納
- 前回の状態に一旦戻らずに展開、収納される
-
JSplitPane
自体をリサイズすると収納されているコンポーネントの最小サイズ(setMinimumSize
)まで自動的に展開される -
JSplitPane#getActionMap()#get("selectMin")
などで取得できるAction
ではsetKeepHidden(boolean)
が使われていない
- HOMEキー、ENDキーで展開、収納
-
GTKLookAndFeel
はワンタッチボタンをサポートしないのでSplitPane.supportsOneTouchButtons: Boolean.FALSE
が設定されている
- 収納状態を維持したい場合、リフレクションを使って、BasicSplitPaneUI#setKeepHidden(true)メソッドを実行したり、Dividerに表示されているJButtonを取得実行する方法があります。
参考リンク
- JSplitPane#setOneTouchExpandable(boolean) (Java Platform SE 8)
- Bug ID: 5006095 Need a way to programmatically stick JSplitPane divider under j2sdk 1.5
- JSplitPaneの収納状態を維持する
- java - JSplitPane setOneTouchExpandable(true) is not shown - Stack Overflow
- - HOMEキーやENDキー(F8キーなどでdividerにフォーカスを移動した状態で)を押して展開、収納する方法では、divider中のJButtonを押して展開、収納した場合と動作が異なります。
- HOMEキー、ENDキーで展開、収納
- 前回の状態に一旦戻らずに展開、収納される
- JSplitPane自体をリサイズすると、収納されているコンポーネントの最小サイズ(setMinimumSize)まで勝手に展開される
- JSplitPane#getActionMap()#get("selectMin")などで取得できるActionでは、setKeepHidden(boolean)が使われていない
コメント
- ソースファイルをダウンロードして
eclipse
でプロジェクト作成しそこにコピーしたのですが、「インポートされたjavax.jnlp
は見つかりません」と出てきて実行出来ないのですが、javax.jnlp
はどこに置けば良いのでしょうか? -- ニートン-
eclipse
はほとんど使ったことがないのでインポートの詳細(もしかしてAnt
のbuild.xml
を取り込む機能がある?)が分からないのですが、javax.jnlp
パッケージは、${java.home}/lib/javaws.jar
にあるので、ここにクラスパスが通っていないのかもしれません。このサンプルでは、javax.jnlp.*
は使用しないので、build.xml
から<pathelement location="${java.home}/lib/javaws.jar" />
を削除するか、または、eclipse
で新規プロジェクトを作成し、ソースコードだけ貼り付けるのが簡単だと思います。 -- aterai
-
- 「
eclipse
で新規プロジェクトを作成し、ソースコードだけ貼り付けるのが簡単だと思います。」の通りしていたのですが。。。結果的にはjnlp.jar
ファイルをjdk1.6
の中から探してeclipse
の「外部jar
を追加」で動作いたしました。お騒がせしました。それと、このjavax.jnlp
はBasicService
関連のクラスファイルが入ってるようなので削除できないみたいです。-- ニートン- すいません。「このサンプルでは、
javax.jnlp.*
は使用しないので...」はデタラメで、BasicService
が取得できるかどうかで、Web Start
で起動したのかどうかを判断する部分を見落としていました。Web Start
で起動した場合は、getComponents()
でボタンを検索する方法で、ローカルから起動した場合は、リフレクションでprivate
なsetKeepHidden
メソッドを取得して実行する方法を使っています。大変失礼しましたm(__)m。 -- aterai
- すいません。「このサンプルでは、
参考リンク
コメント
- ソースファイルをダウンロードしてeclipseでプロジェクト作成しそこにコピーしたのですが、「インポートされた javax.jnlp は見つかりません」と出てきて実行出来ないのですが、 javax.jnlpはどこに置けば良いのでしょうか? -- ニートン?
- eclipseはほとんど使ったことがないのでインポートの詳細(もしかしてAntのbuild.xmlを取り込む機能がある?)が分からないのですが、javax.jnlp パッケージは、${java.home}/lib/javaws.jar にあるので、ここにクラスパスが通っていないのかもしれません。このサンプルでは、javax.jnlp.*は使用しないので、build.xmlから <pathelement location="${java.home}/lib/javaws.jar" /> を削除するか、または、eclipseで新規プロジェクトを作成し、ソースコードだけ貼り付けるのが簡単だと思います。 -- aterai
- >eclipseで新規プロジェクトを作成し、ソースコードだけ貼り付けるのが簡単だと思います。
その通りしていたのですが。。。結果的にはjnlp.jarファイルをjdk1.6の中から探してeclipseの「外部jarを追加」で動作いたしました。お騒がせしました。それと、このjavax.jnlpはBasicService関連のクラスファイルが入ってるようなので削除できないみたいです。-- ニートン?
- すいません。「このサンプルでは、javax.jnlp.*は使用しないので...」はデタラメで、BasicServiceが取得できるかどうかで、Web Start で起動したのかどうかを判断する部分を見落としていました。Web Start で起動した場合は、getComponents()でボタンを検索する方法で、ローカルから起動した場合は、リフレクションでprivate な setKeepHidden メソッドを取得して実行する方法を使っています。大変失礼しましたm(__)m。 -- aterai