2017-07-12 2 views
0

J'essaie d'ajouter un groupe de boutons radio similaire à http://www.java2s.com/Code/Java/Swing-Components/RadioButtonTableExample2.htm dans mon formulaire, j'ai suivi le tutoriel ci-dessus mais j'utilise AbstractTableModel au lieu de DefaultTableModel. Voici mon code, il doesnot montrer quoi que ce soit sur colomun aucune erreur:ne montrant pas le groupe bouton radio à l'intérieur coloum dans jtable

StudentTableModel model = new StudentTableModel(studentList); 

    // JScrollPane scrollPane = new JScrollPane(table); 
    final JScrollPane scrollPane = new JScrollPane(
      table, 
      JScrollPane.VERTICAL_SCROLLBAR_NEVER, 
      JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
    Dimension d = table.getPreferredSize(); 
    scrollPane.setPreferredSize(
      new Dimension(d.width,table.getRowHeight()*rows)); 

    // code for radio buttons 
    String[] answer = { "A", "B", "C" }; 
    TableColumnModel columnModel = table.getColumnModel(); 
    for (int tc = 7; tc < table.getColumnCount(); tc++) 
    { 
    columnModel.getColumn(tc).setCellRenderer(
      new MainClass().new RadioButtonRenderer(answer)); 
    columnModel.getColumn(tc).setCellEditor(
      new MainClass().new RadioButtonEditor(new JCheckBox(), new MainClass().new RadioButtonPanel(
        answer))); 
    } 
    table.setModel(model); 

    frame.getContentPane().add(scrollPane, BorderLayout.CENTER); 
    frame.getContentPane().add(navigation, BorderLayout.SOUTH); 
    frame.pack(); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 

Merci d'avance !!

Répondre

1

Le code est en essayant de définir le moteur de rendu et l'éditeur avant de définir le modèle. Il n'y a donc pas de colonnes pour définir un moteur de rendu/éditeur. Le modèle doit d'abord être défini, ensuite seulement les colonnes seront créées - le simple fait de créer le modèle ne le lie pas à la table, la table ne sait pas à l'avance combien de colonnes elle aura.

Probablement vous voulez quelque chose comme

StudentTableModel model = new StudentTableModel(studentList); 
table.setModel(model); // moved from below 

// JScrollPane scrollPane = new JScrollPane(table); 
... 

L'exemple que vous suivez fait donc, en fait, il crée la table avec le modèle comme argument ...

Astuce: pourquoi new MainClass() dans new MainClass().new RadioButtonRenderer(... et d'autres ? Vous voulez vraiment une nouvelle MainClass? Déclarez ces classes en tant que static et enlevez le new MainClass()