2011-01-27 7 views
2

JComboBox(またはもっと一般的にはJPanel、おそらく?)をJRadioButtonに追加したいと考えていますが、これを行う最も簡単な方法は何ですか?天候
O締約国01​​ O動物JRadioButton内のJComboBox

-science
O {メタ、擬似} O

擬似賢明な、そのうちの一つは、複数の選択肢を含んでラジオボタングループは、次のようになります

ここで、{}はドロップダウンリストです。ここでのトリックは、ドロップダウンリストまたはラベル'-science'のいずれかをクリックすると、ラジオボタンがアクティブになり、UI境界線とそのすばらしいものすべてが表示されるということです。

感謝:)

答えて

3

私はこのような答えを与えて憎むが、この場合には、私はそれが最善であると感じ...

これは非常に非標準のUIコンポーネントのように思えます。

O The weather 
O Parties 
O meta-science 
O pseudo-science 
O Animals 

ユーザーはあなたが提案されているコンポーネントの種類に精通していないだろう、そしてそれは、リスト内の他のオプションと非常に矛盾している:あなただけやった場合、それははるかに良いUXだろう。私は、より標準的な規則を使用することを強くお勧めします。私のよりよい判決に対して


、私はComboBoxRadioButtonを提示:それは完全ではありません
、また私はそれを使用することをお勧めしますが、それはあなたが望むもののように見えます。

import java.awt.FlowLayout; 

import javax.swing.AbstractButton; 
import javax.swing.ButtonGroup; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JRadioButton; 
import javax.swing.JToggleButton; 

public class ComboBoxRadioButton extends JRadioButton { 

    private JLabel beforeText, afterText; 
    private JComboBox comboBox; 

    public ComboBoxRadioButton(String beforeTxt, JComboBox comboBox, 
              String afterText) { 
     this.comboBox = comboBox; 
     this.beforeText = new JLabel(" " + beforeTxt); 
     this.afterText = new JLabel(afterText); 
     comboBox.setSelectedIndex(0); 
     setLayout(new FlowLayout()); 
     setModel(new JToggleButton.ToggleButtonModel()); 
     add(this.beforeText); 
     add(this.comboBox); 
     add(this.afterText); 
    } 

    public static void main(String[] args) { 
     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel mainPane = new JPanel(); 
     ButtonGroup group = new ButtonGroup(); 
     AbstractButton b2 = new JRadioButton("Java Swing"); 
     AbstractButton b3 = new ComboBoxRadioButton(
       "It's gonna be a", new JComboBox(new String[] { "good", "bad", 
       "rainy" }), "day!"); 
     AbstractButton b4 = new JRadioButton("After the combo"); 
     group.add(b2); 
     group.add(b3); 
     group.add(b4); 
     mainPane.add(b2); 
     mainPane.add(b3); 
     mainPane.add(b4); 
     f.add(mainPane); 
     f.pack(); 
     f.setVisible(true); 
    } 
} 
+0

ええ、非標準のUI FTW、どうすればよいですか? :) あなたの解決策は単純ですが、 "たくさんの"オプションについては、他のラジオボタンのオプションが本当に関連していて、適切であると仮定しても、それは実行可能な解決策ではないと思います。 また、私はJava Guruが見栄えの良いコードを投げかけているのを見たいと思っています:) – Juhl

+0

@Juhl、あなたはそれを求めました。それは完全ではなく、私はそれを使用することを提案していません。私の編集を参照してください。 – jjnguy

0

私はジャスティンの答えを好きですが、他の代替案:

単一のJComboBoxのすべてのオプションを入れてください。

本当にあなたの質問からルートを取りたいと思ったらそれは可能です。

  • JRadioButtonが左側に、コンボが中央に、右側にラベルが付いたJPanelを作成します。
  • パネル上のクリックを捕捉するためにマウスリスナーを追加します。
  • 境界線、レイアウト、その他のUI項目を調整して見栄えを良くします。
+0

それについて考えましたが、コンポーネントのクロスプラットフォームL&Fはどうですか? 難しいのは、_javax.swing.AbstractButton_または_javax.swing.JToggleButton_を_JRadioButton_のように拡張してから、その動作をボトムアップから設計することです。 – Juhl

+0

@ Juhl、あなたがどれくらい遠いかはわかりませんが、Nimbusのようなルックアンドフィールを指定すると、クロスプラットフォームのルックはデフォルトOSのルックアンドフィールのようなものよりはるかに近くなります。 – jzd