如何得到JTable的某一个cell

xxisxx 2003-09-19 11:23:32
我想给JTable里的某一项(比如,第一行第一列)设置获得焦点(选中)状态,怎么做呢?
我有行列的坐标,怎么得到该cell的句柄,请赐教!多谢
...全文
105 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yongjin 2003-09-19
  • 打赏
  • 举报
回复
// 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)
}
}
yongjin 2003-09-19
  • 打赏
  • 举报
回复
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() {

xxisxx 2003-09-19
  • 打赏
  • 举报
回复
不会很难吧?怎么搞呢?
yongjin 2003-09-19
  • 打赏
  • 举报
回复
哈哈,难倒我了,我到现在用过的table格式控件没有见过有那个功能的,怀疑是否能做到。。。select之后有必要给它光标吗?我觉得给它四方型的焦点就可以了。如果真的一定要查出来可真的是难啊~~~
xxisxx 2003-09-19
  • 打赏
  • 举报
回复
我试了,虽然选中了,可是没有获得焦点,怎么办?
xxisxx 2003-09-19
  • 打赏
  • 举报
回复
谢谢!我这就试试

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧