プログラムを補って下さい(swing)

このQ&Aのポイント
  • JTableでの行削除時に選択された行番号をコンソールに表示する方法を教えてください
  • JComboBoxで選択された項目の文字列とインデックス番号を取得する方法を教えてください
  • JTableとJComboBoxを組み合わせたプログラムの実装方法を教えてください
回答を見る
  • ベストアンサー

プログラムを補って下さい(swing)

下記のプログラムで実装できない所がありますので補える方は教えてください 1.チェックボックスで削除を選択した、行番号をコンソールに表示したい。 2.コンボボックスで選択されたコンボボックスの文字列と選択されたコンボボックス   のインデックス番号が知りたい 以上です。 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.lang.Class; import javax.swing.DefaultCellEditor; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellEditor; import javax.swing.table.TableModel; public class JTableSample1 implements ActionListener{ JComboBox comboBox; public static void main(String[] args) { new JTableSample1().init(); } public void init() { String[] title = { "削除", "String", "Integer", "JComboBox" }; String prompt = "選んで下さい"; Object[][] records = { { Boolean.FALSE, "Rachel Green", new Integer(1970), prompt }, { Boolean.FALSE, "Monica Geller", new Integer(1969), prompt }, { Boolean.FALSE, "Phoebe Buffay", new Integer(1967), prompt }, { Boolean.FALSE, "Joey Tribbiani", new Integer(1967), prompt }, { Boolean.FALSE, "Chandler Bing", new Integer(1968), prompt }, { Boolean.FALSE, "Ross Geller", new Integer(1967), prompt } }; TableModel model = new DefaultTableModel(records, title) { public Class<?> getColumnClass(int column) { return getValueAt(0, column).getClass(); } }; JTable table = new JTable(model); comboBox = new JComboBox(); comboBox.addItem("ごはん食べてる"); comboBox.addItem("テレビみてる"); comboBox.addItem("仕事してる"); comboBox.addItem("寝てる"); TableCellEditor editor = new DefaultCellEditor(comboBox); table.getColumnModel().getColumn(3).setCellEditor(editor); JFrame frame = new JFrame("Joey Table"); frame.getContentPane().add(new JScrollPane(table)); frame.setSize(640, 240); frame.setVisible(true); } public void actionPerformed(ActionEvent e) { System.out.println("選択されたコンボボックス:"+(String)comboBox.getSelectedItem()); System.out.println("選択されたコンボボックスのインデックス番号:"+comboBox.getSelectedIndex()); } }

  • Java
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • x_jouet_x
  • ベストアンサー率68% (162/236)
回答No.1

この場合は、UIによる操作でTableModelオブジェクトが変更される(チェックボックスの選択や解除等)ので、ActionListenerではなくTableModelListenerを使用します。 TableModelListenerを実装した形に修正したソースを張っておきます。 簡単な修正しかしていませんが、行番号やインデックス番号の取り方はすぐに分かると思います。 ---------- import java.lang.Class; import javax.swing.DefaultCellEditor; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellEditor; import javax.swing.table.TableModel; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; // ActionListenerではなく、TableModelListenerを実装する public class JTableSample1 implements TableModelListener { JComboBox comboBox; TableModel model; // インスタンス変数にする public static void main(String[] args) { new JTableSample1().init(); } public void init() { String[] title = { "削除", "String", "Integer", "JComboBox" }; String prompt = "選んで下さい"; Object[][] records = { { Boolean.FALSE, "Rachel Green", new Integer(1970), prompt }, { Boolean.FALSE, "Monica Geller", new Integer(1969), prompt }, { Boolean.FALSE, "Phoebe Buffay", new Integer(1967), prompt }, { Boolean.FALSE, "Joey Tribbiani", new Integer(1967), prompt }, { Boolean.FALSE, "Chandler Bing", new Integer(1968), prompt }, { Boolean.FALSE, "Ross Geller", new Integer(1967), prompt } }; model = new DefaultTableModel(records, title) { public Class<?> getColumnClass(int column) { return getValueAt(0, column).getClass(); } }; JTable table = new JTable(model); model.addTableModelListener(this); // 追加 comboBox = new JComboBox(); comboBox.addItem("ごはん食べてる"); comboBox.addItem("テレビみてる"); comboBox.addItem("仕事してる"); comboBox.addItem("寝てる"); TableCellEditor editor = new DefaultCellEditor(comboBox); table.getColumnModel().getColumn(3).setCellEditor(editor); JFrame frame = new JFrame("Joey Table"); frame.getContentPane().add(new JScrollPane(table)); frame.setSize(640, 240); frame.setVisible(true); } // TableModelListenerのメソッドを実装 public void tableChanged(TableModelEvent e) { System.out.println(model.getValueAt(e.getFirstRow(), e.getColumn())); } }

tkwavek
質問者

お礼

ご回答ありがとうございます。x_jouet_xさんのプログラムでtableChangedメソッドの中身を if(e.getColumn()==0){ int val = e.getFirstRow()+1; System.out.println("チェックボックスの"+val+"行目がクリックされて"+model.getValueAt(e.getFirstRow(), e.getColumn())+"になりました"); } if(e.getColumn()==3){ int val = e.getFirstRow()+1; System.out.println("コンボボックスの"+val+"行目がクリックされて"+model.getValueAt(e.getFirstRow(), e.getColumn())+"になりました"); }を追加しました。 この方法でいいのでしょうか? また、選択されたコンボボックスのインデックス番号が取得できないのですが教えていただけないでしょうか。

その他の回答 (1)

  • x_jouet_x
  • ベストアンサー率68% (162/236)
回答No.2

#1で回答した者です。 やっぱりtableChanged()メソッド内の実装が分からないといけないので、ご希望にそった形でtableChanged()を実装したものを下記に張り付けておきます。 ---------- // TableModelListenerのメソッドを実装 public void tableChanged(TableModelEvent e) { Object obj = model.getValueAt(e.getFirstRow(), e.getColumn()); // 「削除」チェックボックス選択/解除時 if (e.getColumn() == 0) { if ((Boolean)obj) { System.out.println("チェックボックス選択: " + e.getFirstRow()); } else { System.out.println("チェックボックス解除: " + e.getFirstRow()); } } // コンボボックス変更時 if (e.getColumn() == 3) { System.out.println("選択されたコンボボックス: " + comboBox.getSelectedItem()); System.out.println("選択されたコンボボックスのインデックス番号: " + comboBox.getSelectedIndex()); } } ---------- あともう1点ですが、現在のソースだとフレームを閉じてもJavaのプロセスが終了しないのではありませんか? 意図的にそうしているなら問題ありませんが…。 一応、JFrameオブジェクトに対して frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); をしておいた方がいいと思います。

tkwavek
質問者

お礼

度々ご回答いただきありがとうございました。 なんとかチェックボックスとコンボボックスのデータが取得できる ようになりました。ありがとうございました。

関連するQ&A

  • JavaでSwingを用いたコンボボックスの使い方

    こんにちは。 JavaでSwingを使いコンボボックスを使っています。 既にインスタンスを生成済みの空のコンボボックスに1次元配列を格納するにはどのようにしたら良いのでしょうか?いろいろ試行錯誤行いましたがうまくいきませんでした。 ★この空のコンボボックスに後から追加するにはどうしたらよいのでしょうか? JComboBox<String> a1,a2,a3; a1 = new JComboBox<String>(); a2 = new JComboBox<String>(); a3 = new JComboBox<String>(); addItemなどを使ってみましたがうまくいきませんでした。 追加するデータは1次元配列でできています。 Javaのバージョンは7です。 どうぞよろしくお願いします。

    • ベストアンサー
    • Java
  • JTableに、JConboBoxを入れる

    JTableのcolumn=0に、部署を入れます。 そしてcolumn=5に、JComboBoxを設定し、そのcolumn=5 のデータは、コンボボックスから選択してもらいます。 ただ、このコンボボックスの内容は、column=0に入れた 部署により変更したのです。 いろいろと参考にして、テーブルの指定のcolumnに コンボボックスを入れることは出来たのですが、 全部同じコンボボックスになってしまいます。 以下のようにしました。TableColumn の為、 みな同じになるのはわかるのですが、修正方法が わかりません。宜しくお願いいたします。 public void stepColumn(JTable table, TableColumn stepColumn) {  JComboBox comboBox = new JComboBox();  comboBox.setEditable(true);  comboBox.addItem("step_AAA");  comboBox.addItem("step_BBB");  stepColumn.setCellEditor(new DefaultCellEditor(comboBox)); }

  • JavaのSwingのレイアウト

    Swingを学習中ですが、うまくレイアウトできません。 添付した画像のようなレイアウトにしたいです。 作ってみたものは以下です。 import java.awt.BorderLayout; import java.awt.Color; import javax.swing.*; public class LayoutTest { public static void main(String[] args) { JFrame frame = new JFrame(); JPanel panel = new JPanel(); JTextField searchFiled = new JTextField("テキスト"); String[] comboboxString = {"C", "C++", "Java"}; JComboBox comboBox = new JComboBox(comboboxString); JButton button = new JButton("ボタン"); panel.add(comboBox, BorderLayout.EAST); panel.add(searchFiled, BorderLayout.CENTER); panel.add(button, BorderLayout.WEST); frame.add(panel, BorderLayout.PAGE_START); JPanel redPanel = new JPanel(); redPanel.setBackground(Color.RED); frame.add(redPanel); frame.setSize(700, 500); frame.setLocationRelativeTo(null); frame.setVisible(true); } }

    • ベストアンサー
    • Java
  • javaのcomboBoxでデーターの右寄表示

    javaのcomboBoxで表示データーの右寄せ表示について質問します。 Q1)下記のコードでどの様に変更すれば良いでしょうか? ====================== import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JPanel; public class comboBox_Right extends JFrame { public static JComboBox[] combo=new JComboBox[4]; static comboBox_Right frame; public static void main(String args[]){ frame=new comboBox_Right("AAAA"); frame.setVisible(true); } comboBox_Right(String title) { setTitle(title); setBounds(100, 100, 300, 420); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel p = new JPanel(); //======================================== //ComboBox data String[][] combodata = { {"A0", "B0", "C0", "D0"}, //No.1 Combo {"A1", "B1", "C1", "D1"}, //No.1 Combo {"A2", "B2", "C2", "D2"}, //No.1 Combo {"A3", "B3", "C3", "D3"}, //No.1 Combo }; for(int i=0; i<4; i++){ combo[i] = new JComboBox(combodata[i]); //make 4 comboBox combo[i].setPreferredSize(new Dimension(175, 25)); //ComboBox Size } //=============== for(int i=0; i<4; i++) p.add(combo[i]); //add 4 comboBox //=============== Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.CENTER); } } =============================== 以上、宜しくお願いします。

    • ベストアンサー
    • Java
  • SwingでJtableのヘッダ行が表示されません

    SwingでJtableのヘッダ行が表示されません 解決方法とどうして表示されなかったのか理由もできればお願いします。 import java.util.Vector; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; public class Table_Calendar extends JFrame{ Vector<String>[] data = new Vector[3]; public static void main(String args[]){ new Table_Calendar(); } public Table_Calendar(){ super(); // ウィンドウサイズ this.setSize(800, 600); // レイアウト this.setLayout(null); // ウィンドウクローズ時の処理 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // セルのデータ作成 for (int i = 0; i < 3; i++) { data[i] = new Vector<String>(); } // data[0]に名前、data[1]に住所、data[2]に電話番号 data[0].addElement("鈴木一郎"); data[1].addElement("東京都"); data[2].addElement("xxxxxxxxxx"); // テーブル作成 TableModel tableModel = new AbstractTableModel() { // 行数 public int getRowCount() { return 1; } // 列数 public int getColumnCount() { return 3; } // row行column列の値をセット public Object getValueAt(int row, int column) { return data[column].elementAt(row); } // タイトル部の値をセット public String getColumnName(int column) { switch (column) { case 0: return "名前"; case 1: return "住所"; case 2: return "電話番号"; } return ""; } }; JTable table = new JTable(tableModel); table.setLocation(10, 20); table.setSize(600,500); JPanel panel2 = new JPanel(); panel2.setLayout(null); panel2.add(table); /*setBounds(int x,int y,int width,int height)*/ panel2.setBounds(10, 10, 700,700); this.add(panel2); this.setVisible(true); } }

    • ベストアンサー
    • Java
  • SwingのJTableについて

    swingなのですが下記のプログラムで実現できない点があります。 1.isCellEditableメソッドを使ってセルを編集可能にしたのですが 編集した文字が消えてしまいます。 2.また、ボタンを配置してボタンを押下時に編集したセルの   行のデータをコンソールに表示したいのですがどうすればいいかわかりません。 3.画面レイアウトがsetLocation(x, y)した位置に表示されません。 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Vector; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; public class JTableSample4 implements ActionListener { static Vector<String>[] data = new Vector[3]; static JFrame frame; public static void main(String[] args) { frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(null); JPanel panel1 = new JPanel(); // セルのデータ作成 for (int i = 0; i < 3; i++) { data[i] = new Vector<String>(); } // data[0]に名前、data[1]に住所、data[2]に電話番号 data[0].addElement("鈴木一郎"); data[1].addElement("東京都"); data[2].addElement("xxxxxxxxxx"); data[0].addElement("佐藤花子"); data[1].addElement("千葉県"); data[2].addElement("yyyyyyyyyy"); data[0].addElement("田中浩二"); data[1].addElement("埼玉県"); data[2].addElement("zzzzzzzzzz"); data[0].addElement("小川伸介"); data[1].addElement("新潟県"); data[2].addElement("aaaaaaa"); data[0].addElement("佐藤和也"); data[1].addElement("群馬県"); data[2].addElement("bbbbbbb"); data[0].addElement("渡辺悟"); data[1].addElement("愛知県"); data[2].addElement("ccccccc"); data[0].addElement("橋本智也"); data[1].addElement("愛媛県"); data[2].addElement("ddddddd"); data[0].addElement("永井祐二"); data[1].addElement("栃木県"); data[2].addElement("eeeeeee"); data[0].addElement("細貝昭二"); data[1].addElement("福岡県"); data[2].addElement("fffffff"); data[0].addElement("堀野友光"); data[1].addElement("長野県"); data[2].addElement("gggggggg"); // テーブル作成 TableModel tableModel = new AbstractTableModel() { // 行数 public int getRowCount() { return 10; } // 列数 public int getColumnCount() { return 3; } // row行column列の値をセット public Object getValueAt(int row, int column) { return data[column].elementAt(row); } // タイトル部の値をセット public String getColumnName(int column) { switch (column) { case 0: return "名前"; case 1: return "住所"; case 2: return "電話番号"; } return ""; } /******************セルの編集 可/不可を操作するメソッド**********************/ public boolean isCellEditable(int rowIndex, int columnIndex) { /*0が1カラム目 1が2カラム目なのでこの場合電話番号だけ編集可*/ if (columnIndex == 0 || columnIndex ==1) { /*falseは編集不可*/ return false; } else /*trueは編集可*/ return true; } }; JLabel label = new JLabel("電話番号だけがセルを編集することができます"); label.setLocation(10, 10); label.setSize(300, 20); JButton button = new JButton("Click Me!"); button.setLocation(10, 400); button.setSize(20, 20); //button.addActionListener(); JTable table = new JTable(tableModel); JScrollPane scrollPane = new JScrollPane(table); scrollPane.setLocation(10, 40); scrollPane.setSize(750, 180); panel1.add(button); panel1.add(label); panel1.add(scrollPane); panel1.setBounds(10, 10, 800, 230); frame.add(panel1); frame.setSize(800, 600); frame.setVisible(true); } public void actionPerformed(ActionEvent e) { System.out.println("test"); } }

    • ベストアンサー
    • Java
  • Java(指定した配列に値が格納されない)

    指定した配列に対して、値(画像)が挿入されずに困っています。 プログラムの概要を説明します。 パネル上に2次元配列[10][10]のボタンと3つのコンボボックスを造りました。 そしてコンボボックスは、行のインデックスを指定するもの、列のインデックスを指定するもの、 指定した場所に対して値(画像)を設定するもの、の3つでこれらが左から並んでいます。 現在の状況では、行と列に対してどのインデックスを指定しても、必ず[2][2]の値(画像)が変わってしまいます。 まだJavaは経験が浅いので、理由がわからず困っています。 よろしくお願いします。 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class GUISwing18 extends JFrame implements ActionListener{ JButton[][] button = new JButton[10][10]; //ボタンに挿入する画像 final ImageIcon black = new ImageIcon("./image/black.gif"); final ImageIcon white = new ImageIcon("./image/white.gif"); final ImageIcon empty = new ImageIcon("./image/empty.gif"); public static void main(String[] args) { new GUISwing18(); } GUISwing18(){ getContentPane(); JPanel mainpanel = new JPanel(); mainpanel.setLayout(new BoxLayout(mainpanel, BoxLayout.Y_AXIS)); JPanel subpanel = new JPanel(); subpanel.setLayout(new GridLayout(10,10)); //ボタンを作る for(int i = 0 ; i < 100 ; i++){ button[i/10][i%10] = new JButton(black); subpanel.add(button[i/10][i%10]); } mainpanel.add(subpanel); //コンボボックスを設定 JPanel cb = new JPanel(new GridLayout(1,0)); JComboBox row = new JComboBox(); JComboBox side = new JComboBox(); JComboBox value = new JComboBox(); row.addItem("0"); side.addItem("0"); value.addItem("empty"); row.addItem("1"); side.addItem("1"); value.addItem("black"); row.addItem("2"); side.addItem("2"); value.addItem("white"); row.addItem("3"); side.addItem("3"); row.addItem("4"); side.addItem("4"); row.addItem("5"); side.addItem("5"); row.addItem("6"); side.addItem("6"); row.addItem("7"); side.addItem("7"); row.addItem("8"); side.addItem("8"); row.addItem("9"); side.addItem("9"); cb.add(side); cb.add(row); cb.add(value); row.addActionListener(this); side.addActionListener(this); value.addActionListener(this); mainpanel.add(cb); getContentPane().add(mainpanel); setSize(350,500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void actionPerformed(ActionEvent e) { JComboBox row = (JComboBox)e.getSource(); JComboBox side = (JComboBox)e.getSource(); JComboBox value = (JComboBox)e.getSource(); int x = row.getSelectedIndex(); int y = side.getSelectedIndex(); int z = value.getSelectedIndex(); switch(z){ case 0: button[x][y].setIcon(empty);break; case 1: button[x][y].setIcon(black);break; case 2: button[x][y].setIcon(white); break; } } }

    • ベストアンサー
    • Java
  • getSelectedIndexでコンパイルエラー

    コンボボックスのインデックス値を取得したいのですが、System.out.println(cb.getSelectedIndex());でコンパイルエラーが出ます。 いろいろ調べてやってみましたが、どこが間違っているのかよく分かりません。 全くの初心者ですので、よろしくお願いします。 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class cbx{ private JFrame frame; private JPanel panel; private JComboBox cb; public cbx(){ frame = new JFrame("題名"); //コンテンツ区画の取得 Container cont = frame.getContentPane(); //レイアウトマネージャーを使わない cont.setLayout(null); //パネルを作成してレイアウトをセット panel = new JPanel(); panel.setBackground(Color.WHITE); //コンボボックスを作成 JComboBox cb = new JComboBox(); cb.addItem("選択"); cb.addItem("レベル1"); cb.addItem("レベル2"); cb.addItem("レベル3"); cb.addItem("レベル4"); cb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { System.out.println(cb.getSelectedIndex()); } }); //コンテンツ区画に追加 cont.add(panel); cont.add(cb); // setBounds(左上X座標,Y座標,幅,高さ) cb.setBounds(20,280,200,30); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(100, 100, 600, 400); frame.setVisible(true); } // main メソッドの定義 public static void main(String args[]){ cbx application = new cbx(); } }

    • ベストアンサー
    • Java
  • javaのpanelが表示されません

    下記のプログラムを作ったんですが、eclipseで実行するとフレームは表示されますが、空のフレームのような状態で、panelやボタンなどは表示されません。mainとは別のクラスで作成してるからなんでしょうか?よろしくお願いします。 import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class Table0 { public static void main(String[] args) { new Frame0(); } } class Frame0{ JFrame frame; JPanel panel; JScrollPane jsp; JTable table; DefaultTableModel dtm; public Frame0(){ frame=new JFrame("table"); frame.setBounds(30, 30, 300, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); table=new JTable(8,5); jsp=new JScrollPane(table); jsp.setPreferredSize(new Dimension(250, 70)); panel=new JPanel(); panel.add(jsp); Container c=frame.getContentPane(); c.add(panel,BorderLayout.CENTER); } }

    • ベストアンサー
    • Java
  • comboBoxのデータの右づめ表示

    GridBagLayoutでデーターの右づめ表示が出来ません。 Q1)下記のコードで、変更方法をお教えください。 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.LineBorder; public class comboBox_Right extends JFrame { public static JComboBox[] combo=new JComboBox[4]; static comboBox_Right frame; public static void main(String args[]){ frame=new comboBox_Right("AAAA"); frame.setVisible(true); } comboBox_Right(String title) { setTitle(title); setBounds(100, 100, 300, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel p = new JPanel(); //=========================== GridBagLayout layout=new GridBagLayout(); GridBagConstraints gbc=new GridBagConstraints(); p.setBackground(Color.GREEN); //GRREN-->BLUE back ground color of West panel p.setLayout(layout); //これが効いた <--- layout=new GridBagLayout(); LineBorder border = new LineBorder(Color.BLACK, 1, true); //ComboBox data String[][] combodata = { {"A0", "B0", "C0", "D0"}, //No.1 Combo {"A1", "B1", "C1", "D1"}, //No.1 Combo {"A2", "B2", "C2", "D2"}, //No.1 Combo {"A3", "B3", "C3", "D3"}, //No.1 Combo }; int wx=100, wy=25; for(int i=0; i<4; i++){ combo[i] = new JComboBox(combodata[i]); //make 4 comboBox ((JLabel)combo[i].getRenderer()).setHorizontalAlignment(JLabel.RIGHT); setComboBox(combo[i], layout, gbc, 0, i, wx, wy); //0:index } for(int i=0; i<4; i++) p.add(combo[i]); //add 4 comboBox Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.CENTER); } void setComboBox( JComboBox combo, GridBagLayout layout, GridBagConstraints gbc, int px, int py, int wx, int wy){ combo.setEditable(true); GCombo_Layout(layout, combo, gbc, px, py, wx, wy); } void GCombo_Layout(GridBagLayout layout, JComboBox combo, GridBagConstraints gbc, int x, int y, int wx, int wy){ combo.setPreferredSize(new Dimension(wx,wy)); gbc.gridx = x; gbc.gridy = y; gbc.gridheight = 1; gbc.weightx = 1.0d; gbc.weighty = 1.0d; gbc.fill = GridBagConstraints.NONE; gbc.insets = new Insets(0, 0, 0, 0); layout.setConstraints(combo, gbc); } } //以上

専門家に質問してみよう