2012-05-28 28 views
1

我在工作,在PROGRAME獲得所選擇的單選按鈕,我需要從一個JTable如何從JTable中

獲得所選擇的無線電BUTTOM我發現我在工作的

有一爲例類

第一:

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); 
     } 
    }); 
    }*/ 
} 
在第二類我試圖添加上的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)); 
    } 

,我的問題是,我不能選擇單選按鈕:

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

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

我總是得到nullll

任何幫助PLZ!

回答

5

請閱讀我對this question的回答。您不應該將組件存儲在表中。存儲布爾值。然後,您應該配置渲染器以將布爾值顯示爲單選按鈕,並使用編輯器來更改已檢查的單元格的值以及先前檢查的單元格的值。並且理解,渲染器的相同實例用於渲染/編輯同一類的單元格。

+0

我怎樣才能存儲布爾值從我的例子中RadioButton的結果?? –

+0

重寫表模型中的'setValueAt()'。如果新值爲true,那麼找到當前爲true的行,並將其值設置爲false。值設置爲true併爲兩個單元格激發一個模型事件,編輯器應該覆蓋getEditorValue()並根據收音機是否被選中返回true或false。 –

+0

謝謝先生,對於這一個^^ –

3
  • 我覺得不容易就業,TableCellEditorJRadioButtons in the ButtonGroup

  • 使用JCheckBox如果可能

  • 使用JComboBoxTableCellEditor,而不是JRadioButtonsButtonGroup如果有可能,爲的TableCellRenderer可以在ButtonGroup中使用JRadioButtons

+0

有什麼辦法做這樣的事情,但在JTable? –

+0

@ user1417996您是否嘗試過我在我的答案中鏈接的示例,如果您取消註釋'// theTable.setDefaultEditor(Status.class,new ...'然後您可以將'JComboBox'看作'TableCellEditor' – mKorbel