1

私はプログラムに取り組んでおり、Jtable から選択したラジオボタンを取得する必要があります

私が取り組んでいる例を見つけました

クラスにある

1日目:

  import java.awt.Component;
  import java.awt.event.ItemEvent;
  import java.awt.event.ItemListener;

 import javax.swing.DefaultCellEditor;
 import javax.swing.JCheckBox;
 import javax.swing.JRadioButton;
 import javax.swing.JTable;
 import javax.swing.table.TableCellRenderer;

 class RadioButtonRenderer implements TableCellRenderer {
   public Component getTableCellRendererComponent(JTable table, Object value,
       boolean isSelected, boolean hasFocus, int row, int column) {
     if (value == null)
       return null;
     return (Component) value;
   }
 }

 class RadioButtonEditor extends DefaultCellEditor implements ItemListener {
   /**
     * 
      */
     private static final long serialVersionUID = 1L;
 private JRadioButton button;

   public RadioButtonEditor(JCheckBox checkBox) {
     super(checkBox);
   }

   public Component getTableCellEditorComponent(JTable table, Object value,
       boolean isSelected, int row, int column) {
     if (value == null)
       return null;
     button = (JRadioButton) value;
     button.addItemListener(this);
          return (Component) value;
   }

   public Object getCellEditorValue() {
     button.removeItemListener(this);
     return button;
   }

   public void itemStateChanged(ItemEvent e) {
     super.fireEditingStopped();
   }
 }

2番目のクラスは次のとおりです。

     package TP2;
     import java.awt.event.ActionEvent;
              import java.awt.event.ActionListener;
     import java.awt.event.ItemEvent;

     import javax.swing.ButtonGroup;
     import javax.swing.ButtonModel;
     import javax.swing.JButton;
     import javax.swing.JCheckBox;
     import javax.swing.JFrame;
     import javax.swing.JPanel;
     import javax.swing.JRadioButton;
     import javax.swing.JScrollPane;
     import javax.swing.JTable;
     import javax.swing.JToggleButton;
     import javax.swing.event.TableModelEvent;
     import javax.swing.table.DefaultTableModel;

     import net.miginfocom.swing.MigLayout;

     public class tablesDesEtudiants extends JFrame {

           public tablesDesEtudiants(Object[][] objt) {
             super("List des etudiants");

           //  UIDefaults ui = UIManager.getLookAndFeel().getDefaults();

            // UIManager.put("RadioButton.focus", ui.getColor("control"));

             DefaultTableModel dm = new DefaultTableModel();
             dm.setDataVector(objt , new Object[]                           {"Nom","Prénom","Année","Succs","Type","Select"});

             JTable table = new JTable(dm) {
               public void tableChanged(TableModelEvent e) {
                 super.tableChanged(e);
                 repaint();
      }
    };
    final ButtonGroup group1 = new ButtonGroup();
    for(int i =0 ; i<objt.length;i++){
    if(objt[i][1]!=null)

        group1.add((JRadioButton) dm.getValueAt(i, 5));
    }
   // System.out.println(objt.length);

    table.getColumn("Select").setCellRenderer(new RadioButtonRenderer());
    table.getColumn("Select").setCellRenderer(new RadioButtonRenderer());
    table.getColumn("Select").setCellRenderer(new RadioButtonRenderer());
    table.getColumn("Select").setCellRenderer(new RadioButtonRenderer());
    table.getColumn("Select").setCellRenderer(new RadioButtonRenderer());
    table.getColumn("Select").setCellEditor(new RadioButtonEditor(new JCheckBox()));




   JScrollPane scroll = new JScrollPane(table);

   JButton bView = new JButton("View");
   bView.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {


            ButtonModel choix   = group1.getSelection();
            if (choix != null) {

            System.out.println( choix.getActionCommand());
                            }
            else System.out.println("nullll");
        }
    });


   JPanel  pp =new JPanel();
   MigLayout layout = new MigLayout(

          "",           // Layout Constraints
          "[][]20[]",   // Column constraints
          "[]20[]");    // Row constraint


      pp.setLayout(layout);
      pp.add(scroll,"cell 1 2");

      pp.add(bView,"cell 2 3");
   getContentPane().add(pp);


    setSize(600, 400);
    setVisible(true);


  }


 /* public static void main(String[] args) {
    JRadioButtonTableExample frame = new JRadioButtonTableExample();
    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
  }*/
}

2番目のクラスでは、次のようにButtonGroupにすべてのラジオボタンを追加しようとしています:

   final ButtonGroup group1 = new ButtonGroup();
    for(int i =0 ; i<objt.length;i++){
    if(objt[i][1]!=null)

        group1.add((JRadioButton) dm.getValueAt(i, 5));
    }

私の問題は、 RadioButton を選択できないことです:

         ButtonModel choix  = group1.getSelection();
            if (choix != null) {

            System.out.println( choix.getActionCommand());
                            }
            else System.out.println("nullll");
        }

私はいつもnullllを取得します

何か助けてください!!

4

2 に答える 2

5

この質問に対する私の回答を読んでください。コンポーネントをテーブルに格納しないでください。ブール値を格納します。次に、ブール値をラジオ ボタンとして表示するようにレンダラーを構成し、チェックしたセルの値と以前にチェックしたセルの値を変更するエディターを構成する必要があります。また、レンダラーの同じインスタンスを使用して、同じクラスのすべてのセルをレンダリング/編集することを理解してください。

于 2012-05-28T07:25:00.253 に答える
3
  • ButtonGroup の JRadioButtons についてはTableCellEditor、簡単な仕事ではないと思います

  • JCheckBox可能であれば使用する

  • 可能であれば、代わりにJComboBoxasを使用します。TableCellRendererの場合は、TableCellEditorJRadioButtonsButtonGroupJRadioButtonsButtonGroup

于 2012-05-28T07:24:00.347 に答える