- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 swing JTable
,并且在重新绘制表格时遇到问题。我用下面的代码绘制了一个JTable
Object[] column = new Object[]{"Entity", "Attribute"};
Object[][] rowData = new Object[][]{{"E1", "A1"},{"E2", "A2"}};
TableCellRenderer cellRenderer = new TableCellRenderer();
JTable table = new JTable(new DefaultTableModel(rowData, column));
table.setCellSelectionEnabled(true);
table.getColumnModel().getColumn(0).setCellRenderer(cellRenderer);
下面是我的表格渲染器代码..
public class TableCellRenderer implements javax.swing.table.TableCellRenderer {
//private JPanel panel;
JTextField field;
private JTable table;
@Override
public Component getTableCellRendererComponent(final JTable table, final Object value,
boolean isSelected, boolean hasFocus, final int row, final int column) {
this.table = table;
//JTextField field = null;
System.out.println("Rendere : Row : " + row + "Column : " + column);
final JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
JButton button = new JButton("?");
button.setPreferredSize(new Dimension(20, panel.getHeight()));
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
new SelectionDialog(panel, table, value, row, column);
}
});
if(table.getValueAt(row, column) != null){
field = new JTextField(table.getValueAt(row, column).toString());
}else{
field = new JTextField(table.getValueAt(row, column).toString());
}
field.setPreferredSize(new Dimension(30, panel.getHeight()));
panel.add(field, BorderLayout.WEST);
panel.add(button, BorderLayout.EAST);
return panel;
}
这就是我更新表中单元格内容的方式..
SelectionDialog.this.table.getModel().setValueAt("E7", 0, 0);
我正在通过 SelectionDialog
更新表模型数据,例如将第 0 行、第 0 列的数据更改为 E7 等。更改表模型中的数据后,我尝试了以下选项,但没有一个已刷新 View 中的表数据,但是 JTable
模型中的数据已正确更新。如果我动态添加一个新行,然后调用以下方法,那么一切都会正常工作,但是如果我修改现有行模型中的数据,那么下面提到的解决方案都不起作用
//((DefaultTableModel)SelectionDialog.this.table.getModel()).addRow(new Object[]{"E3", "A3"});
//((DefaultTableModel)SelectionDialog.this.table.getModel()).fireTableCellUpdated(SelectionDialog.this.row, SelectionDialog.this.column);
//((DefaultTableModel)SelectionDialog.this.table.getModel()).fireTableChanged(new TableModelEvent(SelectionDialog.this.table.getModel()));
//((DefaultTableModel)SelectionDialog.this.table.getModel()).fireTableStructureChanged();
//SelectionDialog.this.table.repaint();
// SelectionDialog.this.table.revalidate();
请提供有关该问题的任何见解,因为我正在 Swing ,并且可能错过了一些非常重要的事情。
编辑1:只是添加了一个注释,我想提前放置它,但不知道我是如何错过的。表格通常不会更新,但如果我将注意力从进行更改的单元格中移开,或者更改表格的大小,那么它会立即将该特定单元格的内容更改为新选择的值。
问题已解决:
我将我的发现提供给面临类似问题的人。
我在表格的每个单元格内渲染了一个按钮和一个文本框。单击按钮时(未提供编辑器代码,因为它看起来与我无关,放置在此处)会出现一个对话框,其中输入用户的值并更新特定的列和行。 我在帖子末尾提到的行(在编辑 1 之前)无法正常工作,但是渲染器无法执行,除非我手动将焦点从选定的单元格(单击了其按钮)中移开,或者手动更改 jtable 的大小,这使得感觉按钮位于编辑器内,并且单击按钮显示单元格已被编辑,除非编辑完成(需要焦点移出或输入键等),否则偏离路线的渲染器将不会执行。 我将以下代码应用为
table.editCellAt(-1, -1);
它将焦点从已编辑的单元格(使用按钮编辑)中移出,因此渲染器会按预期执行和工作。
最佳答案
当您使用DefaultTableModel
并且想要更新某个值时,需要使用DefaultTableModel#setValueAt
方法。
调用此方法(当然是在事件调度线程上)将更新您的模型并触发必要的事件。这些事件将导致您的 JTable
自行更新。
关于渲染器的一些附加说明:
JButton
没有任何效果,除非您也有编辑器。该按钮将不可单击,并且您附加到它的操作监听器将永远不会被调用。请参阅renderers and editors section in the JTable
tutorial了解更多信息。getValueAt
。该值作为参数之一传入关于java - Swing JTable 的重绘表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30963616/
我正在尝试使用谷歌浏览器的 Trace Event Profiling Tool分析我正在运行的 Node.js 应用程序。选择点样本后,我可以在三种 View 之间进行选择: 自上而下(树) 自上而
对于一个可能是菜鸟的问题,我们深表歉意,但尽管在 SO 上研究了大量教程和其他问题,但仍找不到答案。 我想做的很简单:显示一个包含大量数据库存储字符串的 Android ListView。我所说的“很
我已经开始了一个新元素的工作,并决定给 Foundation 5 一个 bash,看看它是什么样的。在创建带有水平字段的表单时,我在文档中注意到的第一件事是它们使用大量 div 来设置样式。所以我在下
我有一个 Windows 窗体用户控件,其中包含一个使用 BeginInvoke 委托(delegate)调用从单独线程更新的第 3 方图像显示控件。 在繁重的 CPU 负载下,UI 会锁定。当我附加
我有一堆严重依赖dom元素的JS代码。我目前使用的测试解决方案依赖于 Selenium ,但 AFAIK 无法正确评估 js 错误(addScript 错误不会导致您的测试失败,而 getEval 会
我正在制作一款基于滚动 2D map /图 block 的游戏。每个图 block (存储为图 block [21][11] - 每个 map 总共 231 个图 block )最多可以包含 21 个
考虑到以下情况,我是前端初学者: 某个 HTML 页面应该包含一个沉重的图像(例如 - 动画 gif),但我不想强制客户缓慢地等待它完全下载才能享受一个漂亮的页面,而是我更愿意给他看一个轻量级图像(例
我正在设计一个小软件,其中包括: 在互联网上获取资源, 一些用户交互(资源的快速编辑), 一些处理。 我想使用许多资源(它们都列在列表中)来这样做。每个都独立于其他。由于编辑部分很累,我想让用户(可能
我想比较两个理论场景。为了问题的目的,我简化了案例。但基本上它是您典型的生产者消费者场景。 (我关注的是消费者)。 我有一个很大的Queue dataQueue我必须将其传输给多个客户端。 那么让我们
我有一个二元分类问题,标签 0 和 1(少数)存在巨大不平衡。由于测试集带有标签 1 的行太少,因此我将训练测试设置为至少 70-30 或 60-40,因此仍然有重要的观察结果。由于我没有过多地衡量准
我是一名优秀的程序员,十分优秀!