changeSelection
public void changeSelection(int rowIndex,
                            int columnIndex,
                            boolean toggle,
                            boolean extend)Updates the selection models of the table, depending on the state of the two flags: toggle and extend. All changes to the selection that are the result of keyboard or mouse events received by the UI are channeled through this method so that the behavior may be overridden by a subclass. 
This implementation uses the following conventions: toggle: false, extend: false. Clear the previous selection and ensure the new cell is selected. 
toggle: false, extend: true. Extend the previous selection to include the specified cell. 
toggle: true, extend: false. If the specified cell is selected, deselect it. If it is not selected, select it. 
toggle: true, extend: true. Leave the selection state as it is, but move the anchor index to the specified location. Parameters:
rowIndex - affects the selection at row
columnIndex - affects the selection at column
toggle - see description above
extend - if true, extend the current selection
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
import javax.swing.border.*;import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.*;
import java.awt.event.KeyListener;
import java.awt.Color;public class TableExample4 {
  JTable tableView;  public TableExample4() {
    JFrame frame = new JFrame("Table");
    frame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {System.exit(0);}});        // Take the dummy data from SwingSet.
        final String[] names = {"First Name", "Last Name", "Favorite Color",
          "Favorite Number", "Vegetarian"};
        final Object[][] data = {
          {"Mark", "Andrews", "Red", new Integer(2), new Boolean(true)},
          {"Tom", "Ball", "Blue", new Integer(99), new Boolean(false)},
          {"Alan", "Chung", "Green", new Integer(838), new Boolean(false)},
          {"Jeff", "Dinkins", "Turquois", new Integer(8), new Boolean(true)},
          {"Amy", "Fowler", "Yellow", new Integer(3), new Boolean(false)},
          {"Brian", "Gerhold", "Green", new Integer(0), new Boolean(false)},
          {"James", "Gosling", "Pink", new Integer(21), new Boolean(false)},
          {"David", "Karlton", "Red", new Integer(1), new Boolean(false)},
          {"Dave", "Kloba", "Yellow", new Integer(14), new Boolean(false)},
          {"Peter", "Korn", "Purple", new Integer(12), new Boolean(false)},
          {"Phil", "Milne", "Purple", new Integer(3), new Boolean(false)},
          {"Dave", "Moore", "Green", new Integer(88), new Boolean(false)},
          {"Hans", "Muller", "Maroon", new Integer(5), new Boolean(false)},
          {"Rick", "Levenson", "Blue", new Integer(2), new Boolean(false)},
          {"Tim", "Prinzing", "Blue", new Integer(22), new Boolean(false)},
          {"Chester", "Rose", "Black", new Integer(0), new Boolean(false)},
          {"Ray", "Ryan", "Gray", new Integer(77), new Boolean(false)},
          {"Georges", "Saab", "Red", new Integer(4), new Boolean(false)},
          {"Willie", "Walker", "Phthalo Blue", new Integer(4), new Boolean(false)},
          {"Kathy", "Walrath", "Blue", new Integer(8), new Boolean(false)},
          {"Arnaud", "Weber", "Green", new Integer(44), new Boolean(false)}
        };        // Create a model of the data.
        TableModel dataModel = new AbstractTableModel() {

解决方案 »

  1.   

    // These methods always need to be implemented.
              public int getColumnCount() { return names.length; }
              public int getRowCount() { return data.length;}
              public Object getValueAt(int row, int col) {return data[row][col];}          // The default implementations of these methods in
              // AbstractTableModel would work, but we can refine them.
              public String getColumnName(int column) {return names[column];}
              public Class getColumnClass(int c) {return getValueAt(0, c).getClass();}
              public boolean isCellEditable(int row, int col) {return true;}
              public void setValueAt(Object aValue, int row, int column) {
                System.out.println("Setting value to: " + aValue);
                data[row][column] = aValue;
              }
            };
            // Create the table
            tableView = new JTable(dataModel);
            // Turn off auto-resizing so that we can set column sizes programmatically.
            // In this mode, all columns will get their preferred widths, as set blow.
            tableView.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            tableView.setCellSelectionEnabled(true);
            tableView.addKeyListener(new keyEvent());        // Create a combo box to show that you can use one in a table.
            JComboBox comboBox = new JComboBox();
            comboBox.addItem("Red");
            comboBox.addItem("Orange");
            comboBox.addItem("Yellow");
            comboBox.addItem("Green");
            comboBox.addItem("Blue");
            comboBox.addItem("Indigo");
            comboBox.addItem("Violet");        TableColumn colorColumn = tableView.getColumn("Favorite Color");
            // Use the combo box as the editor in the "Favorite Color" column.
            colorColumn.setCellEditor(new DefaultCellEditor(comboBox));        // Set a pink background and tooltip for the Color column renderer.
            DefaultTableCellRenderer colorColumnRenderer = new DefaultTableCellRenderer();
            colorColumnRenderer.setBackground(Color.pink);
            colorColumnRenderer.setToolTipText("Click for combo box");
            colorColumn.setCellRenderer(colorColumnRenderer);        // Set a tooltip for the header of the colors column.
            TableCellRenderer headerRenderer = colorColumn.getHeaderRenderer();
            if (headerRenderer instanceof DefaultTableCellRenderer)
              ((DefaultTableCellRenderer)headerRenderer).setToolTipText("Hi Mom!");        // Set the width of the "Vegetarian" column.
            TableColumn vegetarianColumn = tableView.getColumn("Vegetarian");
            vegetarianColumn.setPreferredWidth(100);        // Show the values in the "Favorite Number" column in different colors.
            TableColumn numbersColumn = tableView.getColumn("Favorite Number");
            DefaultTableCellRenderer numberColumnRenderer = new DefaultTableCellRenderer() {
              public void setValue(Object value) {
                int cellValue = (value instanceof Number) ? ((Number)value).intValue() : 0;
                setForeground((cellValue > 30) ? Color.black : Color.red);
                setText((value == null) ? "" : value.toString());
              }
            };
            numberColumnRenderer.setHorizontalAlignment(JLabel.RIGHT);
            numbersColumn.setCellRenderer(numberColumnRenderer);
            numbersColumn.setPreferredWidth(110);        // Finish setting up the table.
            JScrollPane scrollpane = new JScrollPane(tableView);
            scrollpane.setBorder(new BevelBorder(BevelBorder.LOWERED));
            scrollpane.setPreferredSize(new Dimension(430, 200));
            frame.getContentPane().add(scrollpane);
            frame.pack();
            frame.setVisible(true);
      }  public static void main(String[] args) {
        new TableExample4();
      }
      private class keyEvent implements KeyListener{
        public void keyPressed(KeyEvent event) {
          if (event.getKeyCode() == KeyEvent.VK_ENTER) {
            // tableView.editCellAt(tableView.getSelectedColumn()+1,tableView.getSelectedRow(),null);
            //tableView.setEditingColumn(tableView.getSelectedColumn()+2);
            tableView.changeSelection(1,2,true,true);
            System.out.println("asdf");
          }
        } // keyPressed(KeyEvent)    /**
         * @see java.awt.event.KeyListener#keyReleased(KeyEvent)
         */
        public void keyReleased(KeyEvent event) {
        }  // keyReleased(KeyEvent)    /**
         * @see java.awt.event.KeyListener#keyTyped(KeyEvent)
         */
        public void keyTyped(KeyEvent event) {
        }  // keyTyped(KeyEvent)
      }
    }
      

  2.   

    哈哈,难倒我了,我到现在用过的table格式控件没有见过有那个功能的,怀疑是否能做到select之后有必要给它光标吗?我觉得给它四方型的焦点就可以了。如果真的一定要查出来可真的是难啊~~~