JTable not rendering JCheckBox or JComboBox in the table in Java Applet

丶灬走出姿态 提交于 2019-12-13 08:20:43

问题


Im having trouble getting my JTable that im using to display either check boxes or combo boxes in my applet.

Here is the code that is not working correctly

 String[] options = {"download", "ignore"};
 Object[] obj = {new JComboBox(options), ((MetadataList)array.get(1)).getMetadata("Filename").getValue()};

 defaultTableModel2.addRow(obj);

The defaultTableModel2 is simply a DefaultTableModel defaultTabelModel2 = new DefaultTableModel() so nothing too dramatic there. The code above is using a JComboBox, but I have also tried using a JCheckBox as well and the same issues were present.

javax.swing.JComboBox[,0,0,0x0,invalid,layout=javax.swing.plaf.basic.BasicComboBoxUI$Handler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.synth.SynthBorder@8380df,flags=320,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder=download] 

is what appears instead of a JComboBox

Any help would be greatly appreciated!


回答1:


For example:

import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

@SuppressWarnings("serial")
public class TableJunk extends JPanel {
   enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY}
   MyTableModel tableModel = new MyTableModel();
   private JTable myTable = new JTable(tableModel);

   public TableJunk() {
      setLayout(new BorderLayout());
      add(new JScrollPane(myTable));

      Object[] rowData = {Day.MONDAY, Boolean.TRUE};
      tableModel.addRow(rowData );
      rowData = new Object[]{Day.TUESDAY, Boolean.TRUE};
      tableModel.addRow(rowData );
      rowData = new Object[]{Day.WEDNESDAY, Boolean.TRUE};
      tableModel.addRow(rowData );
      rowData = new Object[]{Day.THURSDAY, Boolean.TRUE};
      tableModel.addRow(rowData );
      rowData = new Object[]{Day.FRIDAY, Boolean.TRUE};
      tableModel.addRow(rowData );
      rowData = new Object[]{Day.SATURDAY, Boolean.FALSE};
      tableModel.addRow(rowData );
      rowData = new Object[]{Day.SUNDAY, Boolean.FALSE};
      tableModel.addRow(rowData );

      // create the combo box for the column editor          
      JComboBox<Day> comboBox = new JComboBox<TableJunk.Day>(Day.values());
      myTable.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(comboBox));
   }

   private static void createAndShowGui() {
      TableJunk mainPanel = new TableJunk();

      JFrame frame = new JFrame("TableJunk");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }


   private static class MyTableModel extends DefaultTableModel {
      private static final String[] COLUMN_NAMES = {"Day", "Work Day"};

      public MyTableModel() {
         super(COLUMN_NAMES, 0);
      }

      // this method will allow the check box to be rendered in the 2nd column
      public java.lang.Class<?> getColumnClass(int columnIndex) {
         if (columnIndex == 0) {
            return Day.class;
         } else if (columnIndex == 1) {
            return Boolean.class;
         } else {
            return super.getColumnClass(columnIndex);
         }
      };
   }
}


来源:https://stackoverflow.com/questions/11255516/jtable-not-rendering-jcheckbox-or-jcombobox-in-the-table-in-java-applet

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!