我正在关注我发现的一些代码,(是的,我理解它是如何工作的)它来自这里:Code Link
如果单元格值设置为"黄色",我正在尝试设置单元格前景色
这是我的代码:
public class Board extends JPanel{
private static final long serialVersionUID = 1L;
int boardHeight = 20;
int boardWidth = 10;
JTable table;
public Board() {
table = new JTable(this.boardHeight, this.boardWidth);
table.setDefaultRenderer(String.class, new BoardTableCellRenderer());
table.setFocusable(false);
table.setShowGrid(false);
table.setRowMargin(0);
table.setIntercellSpacing(new Dimension(0,0));
table.setRowSelectionAllowed(false);
table.setVisible(true);
this.add(table);
this.setPreferredSize(new Dimension(table.getPreferredSize().width, (table.getPreferredSize().height + 85)));
}
public void paint(Graphics g) {
table.setRowHeight(20);
for (int x = 0; x < this.table.getColumnCount(); ++x) {
TableColumn col = this.table.getColumnModel().getColumn(x);
col.setPreferredWidth(20);
}
}
}
Run Code Online (Sandbox Code Playgroud)
还有Cell Renderer
public class …Run Code Online (Sandbox Code Playgroud) 前言:我对java很糟糕,对java ui组件更糟糕.
我找到了几个关于如何向表添加按钮的不同教程,但是我正在努力添加复选框.我需要有一个列,在默认情况下绘制一个文本框(我认为处理那个单元格渲染器),然后单击复选框,取消选中框,重绘所述框,并触发我可以跟踪的某个地方的事件.
目前我有一个自定义cellrenderer:
public class GraphButtonCellRenderer extends JCheckBox implements TableCellRenderer {
public GraphButtonCellRenderer() {
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if(isSelected)
setSelected(true);
else
setSelected(false);
setMargin(new Insets(0, 16, 0, 0));
setIconTextGap(0);
setBackground(new Color(255,255,255,0));
return this;
}}
Run Code Online (Sandbox Code Playgroud)
其中当前处理勾选框,但只有勾选并取消选中该行的框.但我不知道如何处理这些事件.真的我要问的可能是一个关于如何干净地将复选框添加到JTable的好教程的链接.非常感谢任何帮助:)
我正在尝试使用自定义列标题创建一个表.我希望列标题包含一个用户可以单击的按钮.按钮的功能是从表中删除列.从本质上讲,我试图建立类似这样.
这是我的代码:
public class CustomColumnHeadersTable {
private static String[] columnNames = {
"Column 1", "Column 2", "Column 3"
};
private static String[][] data = {
{"A", "B", "C"},
{"D", "E", "F"},
{"G", "H", "I"}
};
public CustomColumnHeadersTable() {
DefaultTableModel model = new DefaultTableModel((Object[][]) data, columnNames);
JTable table = new JTable(model);
JScrollPane scrollPane = new JScrollPane(table);
//set Header Renderer of each column to use the Custom renderer
Enumeration enumeration = table.getColumnModel().getColumns();
while (enumeration.hasMoreElements()) {
TableColumn aColumn = (TableColumn) enumeration.nextElement(); …Run Code Online (Sandbox Code Playgroud) 我有一个基本的Swing的JTable和要求是任何细胞被点击时,整行应突出,同时又有所单击单元格应该从突出显示行的其余部分不同的颜色.
目前,我已将isRowSelectionAllowed视为true
我尝试使用自定义TableCellRenderer,如下所示:
public class CustomTableCellRenderer extends DefaultTableCellRenderer
{
public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (isSelected) {
c.setBackground(Color.red);
}
else {
c.setForeground(Color.black);
c.setBackground(Color.white);
}
return c;
}
}
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用(整行以红色突出显示).
我还尝试按如下方式设置UIManager属性:
UIManager.put("Table.focusCellBackground",
new javax.swing.plaf.ColorUIResource (Color.red));
Run Code Online (Sandbox Code Playgroud)
但这似乎也不起作用(即使我尝试使用边框设置边框时)
UIManager.put("Table.focusCellHighlightBorder",
new BorderUIResource.LineBorderUIResource(Color.red));
Run Code Online (Sandbox Code Playgroud)
效果很好)
你能否提出我可能需要做的建议?
你们在我的上一个问题上指出了正确的方向,你们真是太棒了,我在这里有一些原始问题的扩展:
如何将JTable列设置为String并排序为Double?
我现在通过使用我的自定义单元格渲染器将我的价格列格式化为$ ###,## 0.00,我现在也为单元格设置了一个JTextField编辑器.编辑单元格工作正常,除了更新值时,我的自定义渲染器中设置的数字格式似乎不再格式化单元格(我在编辑提交后丢失了$).即使在初始显示数据之后,此渲染器是否也不应渲染单元格?
我试过使用以下但没有运气:
((AbstractTableModel) table.getModel()).fireTableDataChanged();
Run Code Online (Sandbox Code Playgroud)
我希望这会强制表重新验证并使用自定义渲染器重新绘制单元格以呈现新值,但遗憾的是这不起作用...
我错过了什么......显然,但是什么?
如何根据特定行显示的输入类型实现具有不同类型的单元格编辑器的JTable?
例如
目前我已实现了AbstractTableModel,它从我的对象中获取一组自定义字段对象,并向表中添加行.我想通过设置特定类型的单元格来进一步自定义我的表格.我可以根据行包含的字段类型确定要使用的单元格类型.
表模型是在运行时动态创建的.
String columnNames[] = {"Time","MAP","ICP","CPP"};
String dataValues[][]= new String [countery]
table = new JTable( dataValues, columnNames );
Run Code Online (Sandbox Code Playgroud)
我正在处理一个表并在dataValues中存储字符串值.我很想知道是否还有从默认大小增加字体大小(这是我假设常规的11字体).这带来了我的另一个问题......甚至是字体颜色?
我正在尝试编写一个方法,该方法对于给定的参数(值,颜色),在具有等于cellValue的值的单元格的背景上设置颜色.
我的方法实际上做的是,它为整行的单元格的背景设置颜色,当我选择表格上的行时,我希望方法只在每次特定列(其中cellValue等于值)设置颜色我叫这个方法.
void setCellBackgroundColor(boolean cellValue, final Color color) {
List<List<Object>> data = tView.getTTableModel().getData();
for (int row = 0; row < data.size(); row++) {
for (int col = 0; col < data.get(row).size(); col++) {
TableCellRenderer renderer = tView.table.getCellRenderer(row, Col);
Component component = tView.table.prepareRenderer(renderer, row, col);
boolean bValue =
TDataTypeRenderer.parseIntoRealValue(
data.get(row).get(col)
)
);
if (bValue == cellValue) {
component.setBackground(color);
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个带有一组不可编辑单元格的JTable,我希望特定列中的所有单元格在鼠标悬停在它们上方时显示不同的鼠标光标.我已经在使用自定义渲染器,并且在渲染器组件上设置光标似乎不起作用(就像它对工具提示一样).
它似乎适用于编辑.
当您的单元格未被编辑或我遗漏了什么时,这在JTable中是不可能的吗?
我试图根据某些行项的值覆盖JXTable的突出显示颜色.这是一个示例,如果行项值有高亮显示为绿色getNumber() % 2 == 0.
它适用于JTable,但对于JXTable,看起来表格单元格渲染器不起作用,除非选择了相关的行.为什么它会这样,我该如何解决?

import java.awt.Color;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;
import org.jdesktop.swingx.JXTable;
import ca.odell.glazedlists.BasicEventList;
import ca.odell.glazedlists.EventList;
import ca.odell.glazedlists.SortedList;
import ca.odell.glazedlists.gui.TableFormat;
import ca.odell.glazedlists.swing.EventTableModel;
public class TableRendererExample {
static public enum ItemKey {
NAME("name") {
@Override public String getStringFromItem(Item item) {
return item.getName();
}
},
NUMBER("#") {
@Override public String getStringFromItem(Item item) {
return Integer.toString(item.getNumber());
}
},
PARENT("parent") {
@Override public String getStringFromItem(Item item) { …Run Code Online (Sandbox Code Playgroud)