Java 达人,我最近在捣腾 Jtable,搞得头都大了,还有有论坛各位大神的帮忙。在此先说一声谢谢了!JFrame上有个 “Add”按钮,按下即给 JTable添加一行数据。我想要的效果是,在给 JTable添加一行数据的时候,能够让新增的一行被选中,同时第一个cell处于全选中、可修改状态。如下图所示,新增加的一行为第 3行。十分感谢!

解决方案 »

  1.   

    我已经写好的代码是这样的import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.GridLayout;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Vector;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.ListSelectionModel;
    import javax.swing.ScrollPaneLayout;
    import javax.swing.SwingConstants;
    import javax.swing.event.ListSelectionEvent;
    import javax.swing.event.ListSelectionListener;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableCellRenderer;
    import javax.swing.table.TableColumn;public class GlobalVari_6 extends JFrame {
        private static final long serialVersionUID = 1L;    private static double select = 0;
        private static int rowIndex = 0;    public JTable table = null;    // 表格方法使用
        public GlobalVari_6() {
            init();        this.setTitle("Global Variables");
            this.setSize(new Dimension(650, 400));
            this.setLocationRelativeTo(null);
            this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            this.setVisible(true);
            // this.setResizable(false);
        }    private void init() {
            Vector<String> colHeader = new Vector<String>();        Vector<Vector<String>> dataVec = new Vector<Vector<String>>();        colHeader.add("  Variable");
            colHeader.add("Value  ");
            colHeader.add("Time  ");        table = new JTable(dataVec, colHeader) {
                private static final long serialVersionUID = 1L;            public boolean isCellEditable(int row, int column) {
                    if (column > 1) {
                        return false;
                    } else {
                        return true;
                    }
                }
            };        // 2设置表头行高
            table.getTableHeader().setPreferredSize(new Dimension(0, 20));
            // 3设置表内容行高
            table.setRowHeight(20);
            // 4设置单选模式
            table.getSelectionModel().setSelectionMode(
                    ListSelectionModel.SINGLE_SELECTION);
            // 5设置单元格不可拖动
            table.getTableHeader().setReorderingAllowed(false);
            // 6设置不可改变列宽
            table.getTableHeader().setResizingAllowed(false);
            // 7设置列宽
            table.getColumnModel().getColumn(0).setPreferredWidth(95);
            table.getColumnModel().getColumn(1).setPreferredWidth(55);
            table.getColumnModel().getColumn(2).setPreferredWidth(30);
            // 注意索引越界        DefaultTableCellRenderer right = new DefaultTableCellRenderer();
            // right.setHorizontalAlignment(JLabel.RIGHT);
            right.setHorizontalAlignment(SwingConstants.RIGHT);
            table.getColumnModel().getColumn(1).setCellRenderer(right);
            table.getColumnModel().getColumn(2).setCellRenderer(right);
            // table.getColumn(table.getColumnName(1)).setHeaderRenderer(right);
            // table.getTableHeader().setDefaultRenderer(new HeaderRenderer(table));
            ((DefaultTableCellRenderer) table.getTableHeader().getDefaultRenderer())
                    .setHorizontalAlignment(JLabel.RIGHT);        TableColumn column = table.getColumnModel().getColumn(0);
            MultiLineHeaderRenderer headerRenderer = new MultiLineHeaderRenderer(
                    SwingConstants.LEFT, SwingConstants.BOTTOM);
            column.setHeaderRenderer(headerRenderer);        /*
             * column = table.getColumnModel().getColumn(1); headerRenderer = new
             * MultiLineHeaderRenderer( SwingConstants.LEFT, SwingConstants.BOTTOM);
             * column.setHeaderRenderer(headerRenderer);
             */        final JButton buttonAdd = new JButton("Add");
            final JButton buttonDel = new JButton("Delete");
            final JButton buttonCls = new JButton("Close");        rowIndex = table.getSelectedRow();
            System.out.println("index:" + rowIndex);
            // 监听事件
            table.getSelectionModel().addListSelectionListener(
                    new ListSelectionListener() {
                        public void valueChanged(ListSelectionEvent e) {
                            if (e.getValueIsAdjusting()) {// 连续操作
                                rowIndex = table.getSelectedRow();
                                if (rowIndex != -1) {
                                    System.out.println("表格行被选中" + rowIndex);
                                    buttonDel.setEnabled(true);
                                    select = 1;
                                }
                            }
                        }
                    });        JScrollPane scrollPane = new JScrollPane();
            scrollPane.setLayout(new ScrollPaneLayout());
            scrollPane.setViewportView(table);
            scrollPane.setBounds(5, 5, 515, 350);
            this.getContentPane().add(scrollPane);        buttonAdd.setEnabled(true);
            buttonDel.setEnabled(false);
            buttonCls.setEnabled(true);        JPanel panel = new JPanel();
            panel.setBounds(520, 5, 10, 350);
            this.getContentPane().add(panel);        panel.setLayout(null);
            panel.add(buttonAdd);
            buttonAdd.setSize(100, 22);
            buttonAdd.setLocation(530, 6);
            panel.add(buttonDel);
            buttonDel.setSize(100, 22);
            buttonDel.setLocation(530, 40);
            panel.add(buttonCls);
            buttonCls.setSize(100, 22);
            buttonCls.setLocation(530, 322);        buttonAdd.addMouseListener(new MouseListener() {
                public void mouseClicked(MouseEvent e) {
                    DefaultTableModel model = (DefaultTableModel) table.getModel();
                    int rownum = table.getRowCount() + 1;
                    boolean exist = true;
                    for (int i = 0; i < model.getRowCount(); i++) {
                        if (model.getValueAt(i, 0).equals("gvar" + rownum)) {
                            exist = false;
                            break;
                        }
                    }                if (exist == true)
                        model.addRow(new Object[] {
                                "gvar" + rownum,
                                "",
                                new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
                                        .format(new Date()) });
                }            public void mousePressed(MouseEvent e) {
                }            public void mouseReleased(MouseEvent e) {
                }            public void mouseEntered(MouseEvent e) {
                }            public void mouseExited(MouseEvent e) {
                }
            });        buttonDel.addMouseListener(new MouseListener() {
                public void mouseClicked(MouseEvent e) {
                    if (select == 1) {
                        DefaultTableModel model = (DefaultTableModel) table
                                .getModel();
                        model.removeRow(rowIndex);
                        select = 0;
                        buttonDel.setEnabled(false);
                    }
                }            public void mousePressed(MouseEvent e) {
                }            public void mouseReleased(MouseEvent e) {
                }            public void mouseEntered(MouseEvent e) {
                }            public void mouseExited(MouseEvent e) {
                }
            });        buttonCls.addMouseListener(new MouseListener() {
                public void mouseClicked(MouseEvent e) {
                    setVisible(false);
                }            public void mousePressed(MouseEvent e) {
                }            public void mouseReleased(MouseEvent e) {
                }            public void mouseEntered(MouseEvent e) {
                }            public void mouseExited(MouseEvent e) {
                }
            });        this.pack();
        }
        
        public static void main(String[] args) {
            new GlobalVari_6();
        }
    }
      

  2.   

    在你的
    buttonAdd.addMouseListener(new MouseListener() {
                public void mouseClicked(MouseEvent e) {}
    方法的最后面加上以下代码,试试看。
    int row = model.getRowCount() - 1;
    int col = 0;
    if (table.editCellAt(row, col)) {
    Component editor = table.getEditorComponent();
    editor.requestFocusInWindow();
    Component c = editor.getComponentAt(0, 0);
    if (c != null && c instanceof JTextComponent) {
    ((JTextComponent) c).selectAll();
    }
    }
      

  3.   

    scbb, 大神呀!!!欢天喜地结贴去!