- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试能够为 JTable 中的单独单元格着色,但到目前为止我只能在整个列上应用 TableCellRenderer,这显然会出现故障。我有一个自定义 JTable:
public class JColorTable extends JTable{
(...)
public void setCellColor(int col, int row, Color newColor) {
getColumnModel().getColumn(col).setCellRenderer(new ColorField(col, row, newColor, background));
repaint();
}
}
ColorField 看起来像这样:
class ColorField extends DefaultTableCellRenderer {
(...))
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
JLabel l = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (row == newRow && column == newCol) {
l.setBackground(Color.red);
} else {
l.setBackground(defaultColor);
}
return l;
}
}
当我在一列中有一个彩色单元格时,这就像一个魅力,但是当我尝试为该列中的另一个单元格着色时,前一个被删除(由于 ColorField 中的条件不适用于前一列)。
有没有办法只将 ColorField 应用于单个单元格,而不是整列?如果是这样,如何?恐怕我没有找到合适的东西。
最佳答案
JTable
有一个您可以覆盖的方法 getCellRenderer()
。当单元格需要渲染时调用它,并根据行和列返回一个单元格。
您的 JTable
需要记录每个单元格使用哪个渲染器(按行和列)。二维数组或 Map
键是 X、Y 值即可。
添加一个方法以在特定单元格(按行和列)上设置渲染器,然后就可以了。
class MyTable extends JTable {
// all the other JTable stuff goes here too ...
public TableCellRenderer getCellRenderer(int row, int column) {
TableCellRenderer myRenderer = getCustomRenderer(row, column);
if (myRenderer != null) {
return myRenderer;
}
// else...
return super.getCellRenderer(row, column);
}
private Map<Integer, Map<Integer, TableCellRenderer>> rendererMap = new ...;
public void setCustomRenderer(int row, int column, TableCellRenderer renderer) {
Map<Integer, TableCellRenderer> m1 = rendererMap.get(row);
if (m1 == null) {
m1 = new ...;
rendererMap.put(row, m1);
}
m1.put(column, renderer);
}
public TableCellRenderer getCustomRenderer(int row, int column) {
Map<Integer, TableCellRenderer> m1 = rendererMap.get(row);
if (m1 == null) {
return null;
}
return m1.get(column);
}
}
getTableCellRenderer
的默认版本使用在列上设置的渲染器(如果有的话),如果没有,则使用基于单元格内容类的渲染器。在许多情况下,默认单元格内容是 Object
。这取决于使用的 TableModel
。
关于java - 在单个单元格上应用 TableCellRenderer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16407086/
我有 2 列的 jTable1。我想控制第 1 列的外观,因此我使用以下代码根据单元格行是偶数还是奇数来将单元格中的文本字体设置为粗体或不粗体。 import java.awt.Component;
我能找到的所有自定义示例 TableCellRenderer似乎都在扩展DefaultTableCellRenderer .我想这没什么不妥,除了您无法扩展当前外观的 TableCellRendere
我想实现一个 JTable 组件的 tablecellrenderer,它应该根据单元格数据显示不同的颜色。我明白了,但我无法更改所选单元格的颜色。我试着这样做: public Component g
我有一个包含四列的 JTable。我正在尝试将其中一列的标题居中对齐。我得到了一个半工作的解决方案,但问题是标题的默认呈现/样式似乎丢失了。见截图。我想获取当前的 TableCellRenderer,
我有一个绑定(bind)到 JTable 的 ArrayList。之后 bindingGroup.unbind(); bindingGroup.bind(); (完成刷新数据)我丢失了表格单元格渲
我正在尝试能够为 JTable 中的单独单元格着色,但到目前为止我只能在整个列上应用 TableCellRenderer,这显然会出现故障。我有一个自定义 JTable: public class J
简单的问题,但我似乎无法在网上找到答案。 如何使用自定义 TableCellRenderer 以粗体显示某些表格单元格? 我知道如何使用 TableCellRenderer 逐个单元格设置背景颜色。你
我正在尝试在 JTable 列上设置 JProgressbar 单元格渲染器。问题是,我的表格单元格上不会显示任何进度条,它只显示进度值。 这是我的 TableModel: public class
我正在尝试使用此教程代码将按钮添加到 JTable 的最后一列: http://www.java2s.com/Code/Java/Swing-Components/ButtonTableExample
尝试将 tablecellrenderer 应用于列。我需要三个不同的图标,分别用于文件夹、zip\rar 文件等。 我该如何设置它们? If 子句(if f.isDirectory()) 根本不起作
大家好,我的程序中遇到以下问题。我有几个按列应用的 tablecellrenderer。问题是,如果某列在我的表中出现两次,则单元渲染器将无法工作,并且两列均未格式化。我也无法更改列名称,因为我的客户
我试图进行检查,如果单元格 3 的值不为空,则整行将被着色为绿色,但是这不会执行任何操作,但是,如果我不进行检查,则仅检查以确保没有任何内容已选择(以便选择会给出颜色以表明您确实选择了)所有内容都绘制
给定一个javax.swing.table.TableColumn...是否可以通过某种方式指定用于给定类型的TableCellRenderer/TableCellEditor,而不是让TableCo
我有一个包含三列字符串的表。我希望最后一列具有绿色背景和粗体字体。所以我想我需要一个自定义的 TableCellRenderer。但是,当我调用 table.setDefaultRenderer 时,
我有一个扩展 DefaultTableCellRenderer 的类,它以等宽字体呈现具有特定颜色的字符串。默认情况下,似乎根本不呈现选项卡(0 个空格)。如何设置选项卡大小和/或使它们呈现? 编辑:
我尝试学习 JTables TableCellRenderer,但有些东西我不明白。也许你们中的一个可以帮助我。 请看一下我在网上找到的这个例子: http://www.java2s.com/Tuto
我使用自定义的 DefaultTableCellRenderer 创建了一个简单的 JTable。它本身工作正常(最后一列着色)。但是,一旦我选择一行或过滤/取消过滤它,该行就会被着色,即使它根本不应
我正在尝试在 jtable 上实现自定义 TableCellRenderer。该表设置为 100 行和 100 列。该表应包含指定字体的所有字形。我的问题是,当表中的值不完整时,它会在第一列中放置最后
我正在实现 TableCellRenderer 以在最后一个值是否为特定值时做出明显的区别。 所以,这些实现的代码是: TableColumnModel tcm = table.getColu
我有一个 JTable,我希望能够更改单击的单个单元格的颜色。 这是我的代码的简化版本: public class TableFrame extends JFrame { public Tab
我是一名优秀的程序员,十分优秀!