私はJava GUIを書いています。私はいくつかのプリセットJComboBoxes
を持っていて、お互いに区別できるように、私はクラスを拡張し、enum
変数を追加しておきます。JComboBoxクラスを拡張するには?
は、ここでは、2つの標準JComboBoxes
のMCVEだ:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class XComboBoxMCVE extends JPanel {
private JComboBox tfComboBox;
private JComboBox ynComboBox;
private JComponent[] components;
public XComboBoxMCVE() {
setLayout(new BorderLayout());
JPanel comboPanel = new JPanel(new GridLayout(0, 1, 5, 5));
Boolean[] trueFalse = { true, false };
DefaultComboBoxModel tfModel = new DefaultComboBoxModel(trueFalse);
tfComboBox = new JComboBox(tfModel);
String[] yesNo = { "Yes", "No" };
DefaultComboBoxModel ynModel = new DefaultComboBoxModel(yesNo);
ynComboBox = new JComboBox(ynModel);
components = new JComponent[] { tfComboBox, ynComboBox };
JButton printSelection = new JButton("Print Type");
printSelection.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (JComponent component : components) {
// I also have other components in component in program,
// therefore this usage..
if (component instanceof JComboBox) {
JComboBox temp = (JComboBox) component;
System.out.println("Printing selection: " + temp.getSelectedItem().toString());
// if (temp.getBoxType() == BoxType.Company){
// System.out.println("Companies say: " +
// temp.getSelectedItem().toString());
// } else if(temp.getBoxType() == BoxType.Device){
// System.out.println("Devices are: " +
// temp.getSelectedItem().toString());
// }
}
}
}
});
JPanel buttonPane = new JPanel(new GridLayout(0, 1, 5, 5));
buttonPane.add(printSelection);
comboPanel.add(tfComboBox);
comboPanel.add(ynComboBox);
add(comboPanel, BorderLayout.CENTER);
add(buttonPane, BorderLayout.PAGE_END);
}
public static void createAndShowGUI(){
JFrame frame = new JFrame("MCVE");
frame.setLayout(new BorderLayout());
XComboBoxMCVE pane = new XComboBoxMCVE();
frame.add(pane, BorderLayout.CENTER);
frame.setResizable(false);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
}
class XComboBox extends JComboBox {
BoxType type;
public XComboBox(BoxType type) {
this.type = type;
}
public void setBoxType(BoxType type) {
this.type = type;
}
public BoxType getBoxType() {
return this.type;
}
public enum BoxType {
Model, Company, Device
}
}
例では、上記説明されたように、ユーザがボタンをクリックしたときに、互いから2 JComboBoxes
別個に私のために方法はありません。 BoxType
の使用例は、1つのタイプのメッセージを印刷する一方で、もう1つのタイプのメッセージは別のメッセージを印刷することです。例えば:私は私が私がXComboBox
クラスではまだ実装していないJComboBox
と入力DefaultComboBoxModel
、で行ったものと同様の使用しようとするコンストラクタで問題につまずいてきたが
if(temp.getBoxType() == BoxType.Device){
System.out.println("The devices are: " + temp.getSelectedItem().toString());
} else if(temp.getBoxType() == BoxType.Company){
System.out.println("The companies say: " + temp.getSelectedItem().toString());
}
。
質問
要素を構築するとき、私はそれをDefaultComboBoxModel
を与えることができるようにどのように私はXComboBox
クラスを変更することができますか?
私はこれを行うことができるようにしたい:
ynComboBox = new XComboBox(tfModel);
ynComboBox.setBoxType(BoxType.Device);
は、任意のヘルプとや指導をありがとう!
1.なぜあなたは最初の場所でするJComboBoxを拡張していますか? 2.あなたが実際に何を抱いているのか、BoxTypeが何を表しているのかは分かりません。 3.実際に実行できる実際の[mcve]コードを作成することを検討してください。 –
うわー..ええ。申し訳ありません..すべてそれをできるだけ早く修正します。何らかの理由で古いタイトルを保存しました。 – Zeliax
完了...何かが分かりにくいかどうかお気軽にお問い合わせください。 MCVEはXComboBoxを使用しませんが、質問の一部であるので、私はそこに保管しました。 – Zeliax