JTable添加JSpinner

在JTable中嵌入编辑器现成的有checkbox,combobox,textfield。(主要是DefaultCellEditor类)

 

这里是嵌入时间微调器(spinner)的例子:

 

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ufidaplugin;

import java.awt.Component;
import java.awt.event.MouseEvent;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.EventObject;
import javax.swing.AbstractCellEditor;
import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.JTable;
import javax.swing.SpinnerDateModel;
import javax.swing.SpinnerListModel;
import javax.swing.SpinnerModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableColumn;

/**
 *
 * @author Administrator
 */
public class TestJtableJspinner {
    
    public static void main(String[] args){
        JTable table = new JTable();
        DefaultTableModel model = (DefaultTableModel)table.getModel();

        // Add some columns
        model.addColumn("A", new Object[]{"item1"});
        model.addColumn("B", new Object[]{"08:09:11"});

        // These are the spinner values
        String[] values = new String[]{"item1", "item2", "item3"};

        // Set the spinner editor on the 1st visible column
        int vColIndex = 0;
        TableColumn col = table.getColumnModel().getColumn(vColIndex);
        col.setCellEditor(new SpinnerEditor(values));

        // 2st
        Calendar calendar = Calendar.getInstance();
        Date initDate = calendar.getTime();
        calendar.add(Calendar.YEAR, -100);
        Date start = calendar.getTime();
        calendar.add(Calendar.YEAR, 200);
        Date end = calendar.getTime();
        TableColumn col2 = table.getColumnModel().getColumn(1);
        SpinnerDateEditor se = new SpinnerDateEditor(new SpinnerDateModel(initDate, start, end, Calendar.YEAR));
        col2.setCellEditor(se);

        JFrame frame = new JFrame("swing-test1");
        frame.add(table);
        frame.pack();
        frame.setVisible(true);

        // If you want to make the cell appear like a spinner in its
        // non-editing state, also set the spinner renderer
        //col.setCellRenderer(new SpinnerRenderer(values));
    }

    public static class SpinnerEditor extends AbstractCellEditor
        implements TableCellEditor {
        final JSpinner spinner = new JSpinner();

        // Initializes the spinner.
        public SpinnerEditor(String[] items) {
            spinner.setModel(new SpinnerListModel(java.util.Arrays.asList(items)));
        }

        // Prepares the spinner component and returns it.
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
            spinner.setValue(value);
            return spinner;
        }

        // Enables the editor only for double-clicks.
        public boolean isCellEditable(EventObject evt) {
            if (evt instanceof MouseEvent) {
                return ((MouseEvent)evt).getClickCount() >= 2;
            }
            return true;
        }

        // Returns the spinners current value.
        public Object getCellEditorValue() {
            return spinner.getValue();
        }
    }

     public static class SpinnerDateEditor extends AbstractCellEditor
        implements TableCellEditor {
        final JSpinner spinner = new JSpinner();

        // Initializes the spinner.
        public SpinnerDateEditor(SpinnerModel model){
            spinner.setModel(model);
            spinner.setEditor(new JSpinner.DateEditor(spinner, "hh:mm:ss"));
        }

        // Prepares the spinner component and returns it.
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
            Date date = null;
            try {
                date = new SimpleDateFormat("hh:mm:ss").parse(value.toString());
                // myDate = new MyDate(date.getTime());
            } catch (ParseException ex) {
                ex.printStackTrace();
            }
            spinner.setValue(date);
            return spinner;
        }

        // Enables the editor only for double-clicks.
        public boolean isCellEditable(EventObject evt) {
            if (evt instanceof MouseEvent) {
                return ((MouseEvent)evt).getClickCount() >= 2;
            }
            return true;
        }

        // Returns the spinners current value.
        public Object getCellEditorValue() {
            Date date = (Date)spinner.getValue();
            return new SimpleDateFormat("hh:mm:ss").format(date);
        }
    }
}
 参考文章: http://www.exampledepot.com/egs/javax.swing.table/Spinner.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值