使用Netbeans将JCheckBox添加到JTable

使用Netbeans将JCheckBox添加到JTable,netbeans,jtable,jcheckbox,Netbeans,Jtable,Jcheckbox,我在JDialog中有一个JTable,我用另一个方法填充它。这是我的代码,我希望对象数组中的第二个null是JCheckBox。我一直在网上闲逛,看到有人说我需要重写tablerenderer中的一个方法或类似的东西,我对如何做感到困惑。不管怎样,这是代码 package privatelessontrackernetbeans; import java.text.DateFormat; import java.text.SimpleDateForma

我在JDialog中有一个JTable,我用另一个方法填充它。这是我的代码,我希望对象数组中的第二个null是JCheckBox。我一直在网上闲逛,看到有人说我需要重写tablerenderer中的一个方法或类似的东西,我对如何做感到困惑。不管怎样,这是代码

            package privatelessontrackernetbeans;

    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.TreeMap;
    import javax.swing.ImageIcon;
    import javax.swing.SwingConstants;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.DefaultTableModel;

    /**
     *
     * @author Brent C
     */
    public class WeeklyLessonsReductionGUI extends javax.swing.JDialog {

        /**
         * Creates new form WeeklyLessonsReductionGUI
         * @param parent
         * @param modal
         */
        public WeeklyLessonsReductionGUI(java.awt.Frame parent, boolean modal) {
            super(parent, modal);
            initComponents();
            postInitComponents();
        }

        private void postInitComponents() {
            ImageIcon icon = new ImageIcon(PSLTrackerInfo.file + "ymcaLogo.png");
            setIconImage(icon.getImage());
            //Table for students that need more lessons
            DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel();
            dtm.setRowCount(0);
            //Center the Titles
            DefaultTableCellRenderer centerRenderer = (DefaultTableCellRenderer)
                    jTable1.getTableHeader().getDefaultRenderer();
            centerRenderer.setHorizontalAlignment(SwingConstants.CENTER);
            //Center the Cells
            jTable1.setDefaultRenderer(Object.class, centerRenderer);

            TreeMap<Instructor, ArrayList<Student>> theList =
                    PSLTrackerInfo.theList_getMap();
            for (Instructor key : theList.keySet()) {
                ArrayList<Student> students = theList.get(key);
                boolean listed = false;
                for (Student values : students) {
                    Calendar c = Calendar.getInstance();
                    c.set(Calendar.DAY_OF_MONTH, Calendar.MONDAY);
                    c.set(Calendar.WEEK_OF_YEAR, values.getLastUpdateWeek());
                    c.set(Calendar.YEAR, values.getLastUpdateYear());
                    DateFormat df = new SimpleDateFormat("MMMM dd, yyyy");
                    Date date = c.getTime();
                    String s = df.format(date);
                    if (listed) {
                        Object[] data = new Object[]{null,
                                values.getName(), s, null, null, null};
                        dtm.addRow(data);
                    } else {
                        Object[] data = new Object[]{values.getInstructor(),
                                values.getName(), s, null, null, null};
                        dtm.addRow(data);
                        listed = true;
                    }
                }
            }

        }

        /**
         * This method is called from within the constructor to initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is always
         * regenerated by the Form Editor.
         */
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {

            jScrollPane1 = new javax.swing.JScrollPane();
            jTable1 = new javax.swing.JTable();
            jButton1 = new javax.swing.JButton();

            setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
            setTitle("Lessons Update");

            jTable1.setModel(new javax.swing.table.DefaultTableModel(
                new Object [][] {

                },
                new String [] {
                    "Instructor", "Student", "Last Update", "Lesson Date", "Lesson Complete", "Unscheduled Lessons"
                }
            ) {
                boolean[] canEdit = new boolean [] {
                    false, false, false, false, true, true
                };

                public boolean isCellEditable(int rowIndex, int columnIndex) {
                    return canEdit [columnIndex];
                }
            });
            jScrollPane1.setViewportView(jTable1);

            jButton1.setText("Update");

            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 829, Short.MAX_VALUE)
                    .addContainerGap())
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                    .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jButton1)
                    .addGap(375, 375, 375))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addComponent(jButton1)
                    .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            );

            pack();
            setLocationRelativeTo(null);
        }// </editor-fold>                        


        // Variables declaration - do not modify                     
        private javax.swing.JButton jButton1;
        private javax.swing.JScrollPane jScrollPane1;
        private javax.swing.JTable jTable1;
        // End of variables declaration                   
    }
package privatelessontrackernetbeans;
导入java.text.DateFormat;
导入java.text.simpleDataFormat;
导入java.util.ArrayList;
导入java.util.Calendar;
导入java.util.Date;
导入java.util.TreeMap;
导入javax.swing.ImageIcon;
导入javax.swing.SwingConstants;
导入javax.swing.table.DefaultTableCellRenderer;
导入javax.swing.table.DefaultTableModel;
/**
*
*@作者布伦特C
*/
公共类WeekleyleSSONResReductionGUI扩展了javax.swing.JDialog{
/**
*创建新表单WeeklySonResReductionGUI
*@param父级
*@param-modal
*/
public WeeklySonRestorionGUI(java.awt.Frame父级,布尔模式){
超级(父级、模态);
初始化组件();
postInitComponents();
}
私有void postInitComponents(){
ImageIcon图标=新的ImageIcon(PSLTrackerInfo.file+“ymcaLogo.png”);
setIconImage(icon.getImage());
//需要更多课程的学生的表格
DefaultTableModel dtm=(DefaultTableModel)jTable1.getModel();
dtm.setRowCount(0);
//标题居中
DefaultTableCellRenderer centerRenderer=(DefaultTableCellRenderer)
jTable1.getTableHeader().getDefaultRenderer();
centerRenderer.setHorizontalAlignment(SwingConstants.CENTER);
//使细胞居中
jTable1.setDefaultRenderer(Object.class,centerRenderer);
树形图列表=
PSLTrackerInfo.theList_getMap();
对于(讲师密钥:list.keySet()){
ArrayList students=list.get(key);
布尔值=false;
对于(学生价值观:学生){
Calendar c=Calendar.getInstance();
c、 设置(Calendar.DAY\u OF\u MONTH,Calendar.MONDAY);
c、 设置(Calendar.WEEK OF_YEAR,values.getLastUpdateWeek());
c、 设置(Calendar.YEAR,values.getLastUpdateYear());
DateFormat df=新的简化格式(“MMMM dd,yyyy”);
Date-Date=c.getTime();
字符串s=df.format(日期);
如果(已列出){
对象[]数据=新对象[]{null,
value.getName(),s,null,null,null};
dtm.addRow(数据);
}否则{
对象[]数据=新对象[]{values.get讲师(),
value.getName(),s,null,null,null};
dtm.addRow(数据);
列出=真;
}
}
}
}
/**
*从构造函数中调用此方法来初始化表单。
*警告:不要修改此代码。此方法的内容始终为
*由表单编辑器重新生成。
*/
@抑制警告(“未选中”)
//                           
私有组件(){
jScrollPane1=newjavax.swing.JScrollPane();
jTable1=newjavax.swing.JTable();
jButton1=newjavax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE\u ON\u CLOSE);
课程名称(“课程更新”);
jTable1.setModel(新的javax.swing.table.DefaultTableModel(
新对象[][]{
},
新字符串[]{
“讲师”、“学生”、“上次更新”、“课程日期”、“课程完成”、“计划外课程”
}
) {
boolean[]canEdit=新的boolean[]{
假,假,假,假,真,真
};
公共布尔值isCellEditable(int-rowIndex、int-columnIndex){
返回canEdit[columnIndex];
}
});
jScrollPane1.setViewportView(jTable1);
jButton1.setText(“更新”);
javax.swing.GroupLayout=newjavax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(布局);
layout.setHorizontalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1,javax.swing.GroupLayout.DEFAULT \-u大小,829,Short.MAX \-u值)
.addContainerGap())
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT\u SIZE,Short.MAX\u值)
.addComponent(jButton1)
.addGap(375、375、375))
);
layout.setVerticalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1,javax.swing.GroupLayout.PREFERRED_SIZE,275,javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton1)
.addContainerGap(javax.swing.GroupLayout.DEFAULT\u SIZE,Short.MAX\u VALUE))
);
包装();
setLocationRelativeTo(空);
}//
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;

public class CheckBoxTable {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Object[][] data
                        = {{"false", false},
                            {"true", true}};

                String[] cols = {"String", "Boolean"};
                DefaultTableModel model = new DefaultTableModel(data, cols) {
                    @Override
                    public Class<?> getColumnClass(int column) {
                        if (column == 1) {
                            return Boolean.class;
                        } else {
                            return String.class;
                        }
                    }
                };

                JTable table = new JTable(model);
                JOptionPane.showMessageDialog(null, new JScrollPane(table));
            }
        });
    }
}