我想在JTable第一列加入JCheckbox,第三列加入JList,可我是初学,不会用。还请有耐心的大哥或大姐帮忙解决下。
解决方案 »
- 绘制图形问题
- 直接点link 创建弹开的新页面
- 求助概念问题,关于基本数据类型与他们的 封装类的不同.....
- socket接收输入流时,不能检测到流的末尾
- 请问用ObjectOutputStream和ObjectInputStream如何修改文件的部分内容?
- 提示框怎么写啊,初学
- beyond_xiruo(又再次无奈的离开)请进!再问APPLET的刷新问题!
- 那种股票系统的客户端是怎样找到服务器的数据库的?
- 请问java初学者(自学)没项目经验,能否找到java编程工作?如果能,待遇如何?
- 请教一个getText的问题。十万火急!
- Java小程序
- 有关JAVA读取不同格式文档的问题,请各位大虾进来给小弟点建议。来者都有分!!!!
import java.awt.*;public class TableRenderDemo extends JPanel {
private boolean DEBUG = false; public TableRenderDemo() {
super(new GridLayout(1,0)); JTable table = new JTable(new MyTableModel());
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
JScrollPane scrollPane = new JScrollPane(table);
initColumnSizes(table);
setUpSportColumn(table, table.getColumnModel().getColumn(2));
add(scrollPane);
}
private void initColumnSizes(JTable table) {
MyTableModel model = (MyTableModel)table.getModel();
TableColumn column = null;
Component comp = null;
int headerWidth = 0;
int cellWidth = 0;
Object[] longValues = model.longValues;
TableCellRenderer headerRenderer =
table.getTableHeader().getDefaultRenderer();
for (int i = 0; i < 5; i++) {
column = table.getColumnModel().getColumn(i);
comp = headerRenderer.getTableCellRendererComponent(
null, column.getHeaderValue(),
false, false, 0, 0);
headerWidth = comp.getPreferredSize().width;
comp = table.getDefaultRenderer(model.getColumnClass(i)).
getTableCellRendererComponent(
table, longValues[i],
false, false, 0, i);
cellWidth = comp.getPreferredSize().width;
column.setPreferredWidth(Math.max(headerWidth, cellWidth));
}
} public void setUpSportColumn(JTable table, TableColumn sportColumn) {
JComboBox comboBox = new JComboBox();
comboBox.addItem("Snowboarding");
comboBox.addItem("Rowing");
comboBox.addItem("Knitting");
comboBox.addItem("Speed reading");
comboBox.addItem("Pool");
comboBox.addItem("None of the above");
sportColumn.setCellEditor(new DefaultCellEditor(comboBox)); DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setToolTipText("Click for combo box");
sportColumn.setCellRenderer(renderer);
} class MyTableModel extends AbstractTableModel {
private String[] columnNames = {"First Name","Last Name", "Sport", "# of Years", "Vegetarian"};
private Object[][] data = {
{"Mary", "Campione",
"Snowboarding", new Integer(5), new Boolean(false)},
{"Alison", "Huml",
"Rowing", new Integer(3), new Boolean(true)},
{"Kathy", "Walrath",
"Knitting", new Integer(2), new Boolean(false)},
{"Sharon", "Zakhour",
"Speed reading", new Integer(20), new Boolean(true)},
{"Philip", "Milne",
"Pool", new Integer(10), new Boolean(false)}
}; public final Object[] longValues = {"Sharon", "Campione",
"None of the above",
new Integer(20), Boolean.TRUE}; public int getColumnCount() {
return columnNames.length;
} public int getRowCount() {
return data.length;
} public String getColumnName(int col) {
return columnNames[col];
} public Object getValueAt(int row, int col) {
return data[row][col];
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col) {
//Note that the data/cell address is constant,
//no matter where the cell appears onscreen.
if (col < 2) {
return false;
} else {
return true;
}
}
public void setValueAt(Object value, int row, int col) {
if (DEBUG) {
System.out.println("Setting value at " + row + "," + col
+ " to " + value
+ " (an instance of "
+ value.getClass() + ")");
} data[row][col] = value;
fireTableCellUpdated(row, col); } private void printDebugData() {
int numRows = getRowCount();
int numCols = getColumnCount(); for (int i=0; i < numRows; i++) {
System.out.print(" row " + i + ":");
for (int j=0; j < numCols; j++) {
System.out.print(" " + data[i][j]);
}
System.out.println();
}
System.out.println("--------------------------");
}
}
private static void createAndShowGUI() {
//Make sure we have nice window decorations.
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("TableRenderDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TableRenderDemo newContentPane = new TableRenderDemo();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
public void setUpSportColumn(JTable table, TableColumn sportColumn) {
JComboBox comboBox = new JComboBox();
comboBox.addItem("Snowboarding");
comboBox.addItem("Rowing");
comboBox.addItem("Knitting");
comboBox.addItem("Speed reading");
comboBox.addItem("Pool");
comboBox.addItem("None of the above");
sportColumn.setCellEditor(new DefaultCellEditor(comboBox)); DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setToolTipText("Click for combo box");
sportColumn.setCellRenderer(renderer);
}
函数的参数 TableColumn sportColumn 的TableColumn报错呀,
我自己写的
setColum(tt,tt.getColumnModel().getColumn(0));
public void setColum(JTable t,这写的不对报错 supercolum){
JCheckBox box=new JCheckBox();
supercolum.setCellEditor(new DefaultCellEditor(box));
// DefaultJTableCellRenderer renderer = new DefaultJTableCellRenderer();
//supercolum.setCellRenderer(renderer); }
int colum=t.getRowCount();
for(int i=0;i<colum;i++){
JCheckBox box=new JCheckBox();
t.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(box));
}
// DefaultJTableCellRenderer renderer = new DefaultJTableCellRenderer();
//supercolum.setCellRenderer(renderer);
}
我已经去掉了renderer,问题还是存在,上边是最新的代码
//设置表格"方式"列的单元格编辑器为组合框
typeTable.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(typeComboBox));
现在的问题你看明白了,是第一列的复选框是true 和false,而不是一框里打勾的效果,还请知道的帮忙。一晚上就一人回我这要命的问题呀。