(嗨……)怎么样在JTable的第一列放小图标,就像netant或者flashget那样:打个勾表示已成功下载! sorry , it is JTable, not JTble 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 通过cellrender来实现。用render可以实现任何你想绘制的东西。 谁有代码给谁分,在google里搜cellrender,居然只有一条记录晕! 不只是要renderer,没有editor你怎么反映变化?public class TableCellCheckBoxEditor extends JCheckBox implements TableCellEditor{ Object oldValue; Vector cellEditorListeners = new Vector(); int rowId; boolean editable = true; public TableCellCheckBoxEditor() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { /**@todo: Implement this javax.swing.table.TableCellRenderer method*/ if(value == null) value = "0"; oldValue = value; rowId = row; this.editable = table.isCellEditable(row,column); if(value.equals("0")) this.setSelected(false); else this.setSelected(true); setBackground(isSelected ? table.getSelectionBackground() : table.getBackground()); setForeground(isSelected ? table.getSelectionForeground() : table.getForeground()); this.setVisible(true); return this; } public Object getCellEditorValue() { if(this.isSelected()) return "1"; else return "0"; } public boolean isCellEditable(EventObject anEvent) { return editable; } public boolean shouldSelectCell(EventObject anEvent) { return true; } public boolean stopCellEditing() { if(cellEditorListeners.size()>0) { for(int i=0;i<cellEditorListeners.size();i++) ((CellEditorListener)cellEditorListeners.elementAt(i)).editingStopped(new ChangeEvent(this));; } return true; } public void cancelCellEditing() { if(oldValue.equals("0")) this.setSelected(false); else this.setSelected(true); if(cellEditorListeners.size()>0) { for(int i=0;i<cellEditorListeners.size();i++) ((CellEditorListener)cellEditorListeners.elementAt(i)).editingCanceled(new ChangeEvent(this)); } } public void addCellEditorListener(CellEditorListener l) { this.cellEditorListeners.addElement(l); } public void removeCellEditorListener(CellEditorListener l) { this.cellEditorListeners.removeElement(l); } private void jbInit() throws Exception { this.addFocusListener(new TableCellCheckBoxEditor_this_focusAdapter(this)); } void this_focusLost(FocusEvent e) { stopCellEditing(); } void this_focusGained(FocusEvent e) { this.setSelected(this.isSelected()?false:true); stopCellEditing(); }}class TableCellCheckBoxEditor_this_focusAdapter extends java.awt.event.FocusAdapter { TableCellCheckBoxEditor adaptee; TableCellCheckBoxEditor_this_focusAdapter(TableCellCheckBoxEditor adaptee) { this.adaptee = adaptee; } public void focusLost(FocusEvent e) { adaptee.this_focusLost(e); } public void focusGained(FocusEvent e) { adaptee.this_focusGained(e); }}public class TableCellCheckBoxRenderer extends JCheckBox implements TableCellRenderer { public TableCellCheckBoxRenderer() { } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { /**@todo: Implement this javax.swing.table.TableCellRenderer method*/ if(value==null) value="0"; if(value.equals("0")) this.setSelected(false); else this.setSelected(true); if(this.hasFocus()) this.setFocusPainted(true); else this.setFocusPainted(false); this.setHorizontalAlignment(SwingConstants.CENTER); setBackground(isSelected ? table.getSelectionBackground() : table.getBackground()); setForeground(isSelected ? table.getSelectionForeground() : table.getForeground()); return this; }} 哦,没注意是要放图标,直接用renderer就可以了,将以上renderer改写为直接实现TableCellRenderer,因为默认是继承自JLabel的,所以直接在getTableCellRendererComponent方法里面set图标就可以了,设置方法同JLabel。 1、楼上,getTableCellRendererComponent()返回一个Component,我怎么在JTable里面用呀2、我的image在那里设进去3、去掉extends JCheckBox 好像不行 http://www2.gol.com/users/tame/swing/examples/JTableExamples8.html 楼上,那个例子中getColumnClass()和getValueAt()两个方法有关联我没法重写getValueAt()因为我要只在表格的第一列放图标,其它列还是要放文字,怎么办? 通过JAVA Runtime执行FTP登录命令,怎么总提示错误 谁有twaver 3.5完整包给我一份 用ultraedit+jdk的小问题 Sun Java课程怎么样? 请问各位怎样用Java做象金山词霸那种屏幕取词效果 求用swing做的较好的办公软件操作界面例子,不要太玄的那种 关于用java.util.zip中的类来解压压缩包(*.zip)时的碰到的奇怪问题? 如何保护从方法中return出来的对象 在HP的SERVER上应该装哪个JDK呢?(这台HP是UNIX的操作系统) 大神们来看看这是什么错误 急!tomcat连接池配置问题,在线给分! 请问java里面输出参数怎么做?
在google里搜cellrender,居然只有一条记录晕!
Object oldValue;
Vector cellEditorListeners = new Vector();
int rowId;
boolean editable = true; public TableCellCheckBoxEditor() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
} } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
/**@todo: Implement this javax.swing.table.TableCellRenderer method*/
if(value == null) value = "0";
oldValue = value;
rowId = row;
this.editable = table.isCellEditable(row,column);
if(value.equals("0"))
this.setSelected(false);
else
this.setSelected(true); setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
setForeground(isSelected ? table.getSelectionForeground() : table.getForeground());
this.setVisible(true);
return this;
}
public Object getCellEditorValue() {
if(this.isSelected()) return "1";
else return "0";
} public boolean isCellEditable(EventObject anEvent) {
return editable;
}
public boolean shouldSelectCell(EventObject anEvent) {
return true;
}
public boolean stopCellEditing() {
if(cellEditorListeners.size()>0) {
for(int i=0;i<cellEditorListeners.size();i++)
((CellEditorListener)cellEditorListeners.elementAt(i)).editingStopped(new ChangeEvent(this));;
}
return true;
}
public void cancelCellEditing() {
if(oldValue.equals("0"))
this.setSelected(false);
else
this.setSelected(true);
if(cellEditorListeners.size()>0) {
for(int i=0;i<cellEditorListeners.size();i++)
((CellEditorListener)cellEditorListeners.elementAt(i)).editingCanceled(new ChangeEvent(this));
}
}
public void addCellEditorListener(CellEditorListener l) {
this.cellEditorListeners.addElement(l);
}
public void removeCellEditorListener(CellEditorListener l) {
this.cellEditorListeners.removeElement(l);
}
private void jbInit() throws Exception {
this.addFocusListener(new TableCellCheckBoxEditor_this_focusAdapter(this)); } void this_focusLost(FocusEvent e) {
stopCellEditing();
} void this_focusGained(FocusEvent e) {
this.setSelected(this.isSelected()?false:true);
stopCellEditing();
}
}class TableCellCheckBoxEditor_this_focusAdapter extends java.awt.event.FocusAdapter {
TableCellCheckBoxEditor adaptee; TableCellCheckBoxEditor_this_focusAdapter(TableCellCheckBoxEditor adaptee) {
this.adaptee = adaptee;
}
public void focusLost(FocusEvent e) {
adaptee.this_focusLost(e);
}
public void focusGained(FocusEvent e) {
adaptee.this_focusGained(e);
}
}
public class TableCellCheckBoxRenderer extends JCheckBox implements TableCellRenderer { public TableCellCheckBoxRenderer() {
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
/**@todo: Implement this javax.swing.table.TableCellRenderer method*/
if(value==null) value="0";
if(value.equals("0"))
this.setSelected(false);
else
this.setSelected(true);
if(this.hasFocus())
this.setFocusPainted(true);
else this.setFocusPainted(false); this.setHorizontalAlignment(SwingConstants.CENTER); setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
setForeground(isSelected ? table.getSelectionForeground() : table.getForeground()); return this;
}
}
2、我的image在那里设进去
3、去掉extends JCheckBox 好像不行
我没法重写getValueAt()因为我要只在表格的第一列放图标,其它列还是要放文字,怎么办?