Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

JComboBoxを表示した同時にドロップダウンリストを自動的に表示させるには?

フレームにJComboBoxを配置(非表示)し、その直上にまったく同じサイズのJTextFieldを重ねて配置しています。
JTextFieldは編集不可でカーソルも点滅させない状態にして文字は「選択して下さい」とライトグレーで表示しています。
このJTextFieldを1度クリックするとJTextFieldを非表示として、その直後に非表示としていたJComboBoxを表示させて、さらにドロップダウンリストを開いた状態で表示させ選択可能状態にしたいと考えています。

1度のクリックでJTextFieldを非表示にして、その直後に非表示としていたJComboBoxを表示させる事は出来たのですが、リストを展開して表示することが出来ません。

isEditableやisPopupvisible、setPopupVisible、showPopup、showPopupVisibleなどを試してみたのですが、思うような結果が得られませんでした。

どうか教えて下さい。
宜しくお願いします。

3

回答

414

閲覧

3件の回答

評価

0

CardLayoutを使って、JTextFieldとJComboBoxを配置し、JTextFieldへのマウスclick時にJComboBoxへ
切り替えると同時にshowPopup()してみると、一瞬だけポップアップするように見えますがすぐに折りたたまれて
しまうようです。
思うに、JTextFieldを非表示にしJComboBoxを表示状態にせよと指示した直後にpopupを出そうとしても、
この後で起こる表示・非表示に伴うイベント処理が動いてしまうためうまくいかないのではないでしょうか。

そう思って試しに以下のようにワンクッションおいてshowPopupすると(一応)動くようでした。

card = new CardLayout();
JPanel panel = new JPanel(card);
panel.add(combo = new JComboBox<>(...), "combo");
panel.add(text = new JText(...), "text");
text.addMouseListener(new MouseAdapter() {
  @Override pubic void mouseClicked(MouseEvent ev) {
    card.show(panel, "combo");
    SwingUtilities.invokeLater(() -> combo.showPopoup());
  }
});

ただし、たまたま動いたように見えましたがこの方法が妥当かどうか全然自信がありません。
というのは質問者さんのやろうとしている方法はあまり一般的な使い方ではないように思えるからです。
一般的な使い方でない方法で進めると、どうかすると今回のように期待どおりに動いてくれない
といったことが発生しやすくなる気がします。
もし、あえてそういう特殊な動作をさせるならイベント処理を自分で調べつくして原因を発見し
動かすぐらいの経験と元気がないと期待通りに動作するようなものに仕上げるのは厳しいんじゃないでしょうか。

もしかすると、やろうとしていることをもう少し平易にできる道がないか、そういう質問をしてみたほうが
いいかも知れませんよ?

評価

0

JTextFieldにマウスが載った瞬間にJComboboxに切り替えちゃだめなん?
つまり、JTextFieldではなくJComboboxをクリックさせる。

後は、無理してコンボにしないでJTextFieldの直下に置いたJListか何かでコンボに見せるか。

評価

0

KSwordOfHaste様、匿名様、回答をしていただきましてありがとうございます。
JTextFieldにマウスが載った瞬間にJComboboxに切り替える方法で解決したしました。
ありがとうございました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。