在JTable列中呈现Toedter的JDateChooser [英] Rendering Toedter's JDateChooser in JTable column

查看:130
本文介绍了在JTable列中呈现Toedter的JDateChooser的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

借口再次询问相同的问题.我的印象是,如果我添加到原始问题,我将不会获得太多的观看次数.

Excuses for asking the same question again. I am under the impression that if I added to the original question, I wouldn't get as many views.

当我使用MVC模式时,我的Swing GUI在不同的类中,控制器创建了它的实例.这是我在视图中创建表格的方式:

As I'm using an MVC pattern, my Swing GUI is in a different class with the controller creating an instance of it. Here is how I create the table in my View:

tableVehiclePermitHeader = new String[] {"Name", "Expiration Date"};
        tableVehiclePermitData = new Object[0][0];


//      Calendar tempDate = new GregorianCalendar(2008, 1, 1);
//      Date tempDate1 = new Date(2008, 1, 1);
//      tempDate1.setYear(tempDate1.getYear() - 1900);
//      tableVehiclePermitData = new Object [][] {{"Hello", tempDate}, {"Hello", tempDate1}};

        tableVehiclePermitDefaultTableModel = new DefaultTableModel(tableVehiclePermitData, tableVehiclePermitHeader);
        tableVehiclePermit = new JTable(tableVehiclePermitDefaultTableModel){
            public Class getColumnClass(int c) {
                return getValueAt(0, c).getClass();
             }

            public boolean isCellEditable(int rowIndex, int colIndex){
                if (colIndex == 0){
                    return false;
                } else {
                    return true;
                }
            }
        };

        tableVehiclePermit.getColumn("Expiration Date").setCellRenderer(new JDateChooserRenderer());
        tableVehiclePermit.getColumn("Expiration Date").setCellEditor(new JDateChooserCellEditor());

注释行正确显示了JDateChooser.只有当我从视图中填充表内容时,我才无法将日期呈现为JDateChoosers.

The commented lines show the JDateChooser correctly. It is only when I populate the table content from my view that I'm unable to render dates as JDateChoosers.

下面是我的渲染器:

public class JDateChooserRenderer extends JDateChooser implements TableCellRenderer{

    Date inDate;

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        // TODO Auto-generated method stub

        if (value instanceof Date){
            this.setDate((Date) value);
        } else if (value instanceof Calendar){
            this.setCalendar((Calendar) value);
        }
        return this;
    }
}

最后,在我的控制器中,我从数据库中获取的数据作为已定义类型的ArrayList从数据库填充表,该类型具有日期字段,类型为java.util.Date(也尝试了java.sql.Date来获得相同的结果).

Finally, my Controller where I get the data to populate the table from a database as an ArrayList of a defined type that has the date fields as type java.util.Date (also tried java.sql.Date to the same result).

ArrayList<VehiclePermitExpirationByVehicleDao> vehPermit = vpmodel.permitExpirationPerVehicle(id);
        VehiclePermitExpirationByVehicleDao permitData;
        permitListData = new Object[vehPermit.size()][3];
        Iterator it = vehPermit.iterator();
        int i = 0;
        while (it.hasNext()){
            permitData = (VehiclePermitExpirationByVehicleDao) it.next();
            permitListData[i][0] = permitData.getVehiclePermitName();
            permitListData[i][1] = permitData.getExpirationDate();
            permitListData[i][2] = permitData.getVehiclePermitId();
            i++;
        }
        gui.setTableVehiclePermitData(permitListData);
        gui.getTableVehiclePermitDefaultTableModel().setDataVector(gui.getTableVehiclePermitData(), gui.getTableVehiclePermitHeader());
        gui.getTableVehiclePermit().setModel(gui.getTableVehiclePermitDefaultTableModel());
        gui.getTableVehiclePermit().setEnabled(true);

有人可以告诉我我在做什么错吗?我怀疑是保存日期的列的类型.

Can someone please advise what I'm doing wrong? My suspicion is the type of the column holding the dates.

此外,如果有人对编辑器的使用方法有所了解,请告诉我.

Also, if anyone had an idea how to go about the editor, kindly let me know.

致谢.

推荐答案

您应该使用columnIndex为Date列获取 TableColumn ,然后在 TableColumn 上设置渲染器和编辑器. >.

You should get TableColumn for the Date column using columnIndex and then set the Renderer and Editor on the TableColumn.

TableColumn column1 = tableVehiclePermit.getColumnModel().getColumn(1);
column1.setCellRenderer(new JDateChooserRenderer());
column1.setCellEditor(new JDateChooserCellEditor());

这篇关于在JTable列中呈现Toedter的JDateChooser的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆