- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当我将 getcolumn 类添加到我的 Abstracttablemodel 时,我无法使用自定义 TableCellRenderer 来设置背景颜色。 (我用它来排序、对齐数字列)
public Class getColumnClass(int columnIndex) {
Object o = getValueAt(0, columnIndex);
if (o == null) {
return Object.class;
} else {
return o.getClass();
}
}
这全是我的代码。
import java.awt.*;
import java.text.DecimalFormat;
import javax.swing.*;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
import javax.swing.table.*;
public class DemoRenderer extends JFrame {
public static void main( String[] args ) {
DemoRenderer frame = new DemoRenderer();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setVisible( true );
}
public DemoRenderer() {
JTable table = new JTable();
table.setModel(new MyTablemodel());
table.setDefaultRenderer(Object.class, new MyCustomTableCellRenderer());
// Tell the table what to use to render our column of doubles
table.repaint();
//table.getColumnModel().getColumn(1).setCellRenderer(new DecimalFormatRenderer() );
getContentPane().add(new JScrollPane(table));
}
}
/**
Here is our class to handle the formatting of the double values
*/
class MyCustomTableCellRenderer extends DefaultTableCellRenderer{
private static final DecimalFormat formatter = new DecimalFormat( "#0.00" );
public Component getTableCellRendererComponent (JTable table,
Object obj, boolean isSelected, boolean hasFocus, int row, int column) {
if(column==1) obj = formatter.format((Number)obj);
Component cell = super.getTableCellRendererComponent(
table, obj, isSelected, hasFocus, row, column);
if (isSelected) {
cell.setBackground(Color.green);
}
else {
if (row % 2 == 0) {
cell.setBackground(Color.cyan);
}
else {
cell.setBackground(Color.lightGray);
}
}
return cell;
}
}
class MyTablemodel extends AbstractTableModel{
Object[] columnNames = { "A", "B", "C" };
Object[][] data = {
{ "1abc", new Double(850.503), 53 },
{ "2def", new Double(36.23254), 6 },
{ "3ghi", new Double( 8.3 ), 7 },
{ "4jkl", new Double( 246.0943 ), 23 }};
@Override
public int getRowCount() {
return data.length;
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return data[rowIndex][columnIndex];
}
public Class getColumnClass(int columnIndex) {
Object o = getValueAt(0, columnIndex);
if (o == null) {
return Object.class;
} else {
return o.getClass();
}
}
}
非常感谢您的意见。
最佳答案
您的 getColumnClass() 方法将返回:第 0、1、2 列的 String.class、Double.class 和 Integer.class。
JTable 将为 Double 和 Integer 列提供默认呈现器。
如果您想对所有列使用自定义渲染器,那么您需要执行以下操作:
MyCustomTableCellRenderer renderer = new MyCustomTableCellRenderer();
table.setDefaultRenderer(Object.class, renderer); // or you could use "String.class"
table.setDefaultRenderer(Double.class, renderer);
table.setDefaultRenderer(Integer.class, renderer);
当您使用“Object.class”时,这意味着仅当没有将特定类的其他自定义渲染器添加到表中时,才使用对象渲染器作为最后的渲染器。
关于java - 一起使用 TableCellRenderer 和 getColumnClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23369527/
我试过搜索,但似乎没有人有答案。 我使用 JTable 来创建一个列出人员的表格,并且我想放置一个 ImageIcon,因此根据我所阅读的内容,我必须重写默认方法才能返回图标而不是字符串。 这是我用的
我正在 Matlab 中使用 JIDE 网格排序和自动过滤功能。我已经重写了 getColumnClass,并且过滤和排序对于整数、 double 和字符串列效果很好(对数字进行数字排序,对字符串分别
我试过搜索,但似乎没有人有答案。 我使用 JTable 来创建一个列出人员的表格,并且我想放置一个 ImageIcon,因此根据我所阅读的内容,我必须重写默认方法才能返回图标而不是字符串。 这是我用的
当我将 getcolumn 类添加到我的 Abstracttablemodel 时,我无法使用自定义 TableCellRenderer 来设置背景颜色。 (我用它来排序、对齐数字列) public
在我的表模型中,我有一个 ArrayList>其中包含我的数据。 数据已从.csv文件中读入,每条记录的形式为: 7.68573749,-8.551567,21,276,AUD,AAA,7.224,1
本文整理了Java中org.dom4j.swing.XMLTableColumnDefinition.getColumnClass()方法的一些代码示例,展示了XMLTableColumnDefini
我试图让我的 jTable 对数字进行排序,但它仍然不起作用。我不确定我做错了什么,但一切似乎都很好。 我的代码: 公共(public)静态javax.swing.JTable jTable1; pu
我有一个问题。我创建一个像这样的 DefaultTableModel --> public static DefaultTableModel buildTableModel(ResultSet rs)
我花了几天时间试图让我的 JTable 正确排序。我知道我必须使用的代码,但似乎无法将其“适合”并应用于我的代码。我正在从数据库获取 TableModel 数据,因此如果我在初始化模型时调用 getC
我正在尝试通过扩展 DefaultTableModel 和覆盖 getColumnClass() 来对我的 JTable 进行排序,如下所示: public Class getColumnClass
我有一个 JTable,我想在其中以复选框的形式显示 boolean 值,它应该能够被编辑(选中/取消选中)。 为了实现这一目标,我实现了 AbstractTableModel 的子类,其中包含所有需
我是一名优秀的程序员,十分优秀!