- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我制作了一个显示 JPanel 的自定义 TableCellRenderer。当 JPanel 包含交互式元素时,我希望它们也能工作,所以我制作了一个自定义 TableCellEditor。它可以工作,但是单击 JPanel 时会出现一些奇怪的行为。有时 JPanel 在单击时会消失。当我只设置一个自定义渲染器时,除了 JPanels 不是交互式的之外,没有任何问题。所以问题一定出在TableCellEditor上。
编辑:
public class PanelTableCellEditor
extends AbstractCellEditor
implements TableCellEditor
{
private Object _component;
@Override
public Object getCellEditorValue()
{
return _component;
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row,
int column)
{
_component = value;
if (value instanceof JPanel)
{
((Component) value).setForeground(UIManager.getColor("List.selectionForeground"));
((Component) value).setBackground(UIManager.getColor("List.selectionBackground"));
return ((Component) value);
}
else
{
return null;
}
}
}
渲染器:
public class PanelTableCellRenderer
extends Component
implements TableCellRenderer
{
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected,
boolean hasFocus, int row,
int column)
{
if (value instanceof JPanel)
{
if (isSelected || hasFocus)
{
((Component) value).setForeground(UIManager.getColor("List.selectionForeground"));
((Component) value).setBackground(UIManager.getColor("List.selectionBackground"));
}
else
{
((Component) value).setForeground(UIManager.getColor("Panel.foreground"));
((Component) value).setBackground(UIManager.getColor("Panel.background"));
}
return ((Component) value);
}
else
{
return new DefaultTableCellRenderer().getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
}
}
在主窗体中我有下一个代码:
DefaultTableModel model = new DefaultTableModel();
model.addColumn(null, new Object[]
{
jPanel1, jPanel2, jPanel1, jPanel2, jPanel1, jPanel2, jPanel1, jPanel2, jPanel1, jPanel2, jPanel1
});
jTable1.setModel(model);
TableColumn column = jTable1.getColumnModel().getColumn(0);
column.setCellRenderer(new PanelTableCellRenderer());
column.setCellEditor(new PanelTableCellEditor());
jTable1.setRowHeight(50);
jTable1.setTableHeader(null);
jScrollPane2.setColumnHeaderView(null);
最佳答案
我在这里看到两个问题:
*重复放置的 AWT/SWING 组件是禁忌! *
1) 将相同的组件添加到面板两次会导致问题。 Swing 不喜欢同一个组件存在于不同的位置——gui 的状态、去绘图等,都是基于一个组件的模型——一个位置。我过去遇到过与您类似的问题,其中一个组件因为被多次添加而变成空白......
缺少变量?
2) 变量 jPanel1/jPanel2 没有在你的代码中的任何地方定义。不过,我认为这在您的实际代码中不是问题 --- 所以如果您显示这些定义,可能会出现其他问题。
关于java - JPanel 作为 TableCellEditor 消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8259103/
我在编辑单元格时遇到问题,我会画图,因为我的英语不是很好。 我添加了一个TableCellEditor(扩展了一个DefaultCellEditor,我知道这不是最好的,但代码不是我的)。当我输入字母
我试图在每一行的末尾添加按钮,到目前为止我已经使用 cellRenderer 来做到这一点。并且我已经成功地在每一行中显示按钮,就像在快照中一样。 但是当我单击按钮时,没有任何操作发生。我想在单击按钮
我正在编写一个带有自定义单元格编辑器的JTable,该编辑器会打开一个对话框以允许用户在第二个表中编辑更多值。问题是,第二个表中的更改没有反射(reflect)在第一个表中,并且基本上丢失了。我使用了
所以我有很多表格和很多单元格编辑器,里面有很多东西。我想我应该重用它们,而不是每次都执行 new() ,因为整个事情都设置了 getTableCellEditorComponent() 但仍然,几乎每
我有一个 JTable。 JTable 中的一列分配有一个扩展的 TableCellEditor,用于显示扩展的 JComboBox。 有一个包含 100 个 String 对象的固定列表用于填充组合
我有一个带有自定义 TableCellRenderer 和自定义 TableCellEditor 的 JTable。默认情况下,第一次单击表格行会从渲染器切换到编辑器,第二次单击选择该行。 有什么方法
所以我有自定义的 CellEditors 和 CellRenderers,尽管我正在这样做 component.setForeground(isSelected ? table.getSelectio
我在 stackoverflow 中找到了一段代码,它允许表有一个自定义单元格编辑器作为 JTextField。 我一直在阅读一些有关单元格编辑器的文章,并且了解每个抽象方法的一些行为。 class
在下面的示例中,我有一个 JTable、一个 JList 和两个 JButton(添加和删除)。列表中有 6 个项目(字符串),当单击“添加”按钮时,所选值将添加到表中。 表中的字符串使用自定义呈现器
我遇到了一个奇怪的错误。我的歌曲列表位于 JFrame 的右侧。当我在任何项目上单击一次时,它会执行我想要的操作:将颜色设置为灰色。但是双击它会显示我的自定义表格单元格的类描述符。 当我点击一次(正确
我已经左对齐我的单元格渲染器,但我如何左对齐我的单元格编辑器?当我编辑其中一个单元格时会发生这种情况 import java.awt.BorderLayout; import javax.swing.
我尝试实现一个包含一些字段和删除按钮的 TableCellEditor。它运行良好,但当行被删除时,被删除单元格中的内容(使用 TableCellEditor 呈现)未更新。 当删除行时,我尝试在模型
我有一张 table 。该表更新数据库的更改。一列由该表中的 JComboBox 编辑。单击该列中的任何单元格都会触发 tableChanged 事件。但是,需要在选择 JComboBox 的项目后触
TableCellEditor 中的 JComboBox 记住不同行甚至不同TableModels 中最后选择的值。例如,在一行上选择一个值,然后转到另一行,开始单元格编辑,JComboBox 会将上
我有一个 TableCellEditor ,它重写 stopCellEditing 来验证内容。作为此验证的一部分,我想与表进行交互。有没有办法确定我们正在编辑哪个表?我认为它会是 getParent
我制作了一个显示 JPanel 的自定义 TableCellRenderer。当 JPanel 包含交互式元素时,我希望它们也能工作,所以我制作了一个自定义 TableCellEditor。它可以工作
我是一名软件开发学徒,必须为我的公司编写图形项目特定的配置编辑器。我使用 Apache POI 从项目的配置 excel 文件中加载数据,并将数据包装到 ConfigValue 对象中。对于不同的 C
我在表格单元格中使用自定义 TableCellRenderer 和多个 JFormattedTextField。我使用与 TableCellEditor 相同的组件。现在我需要知道用户点击了什么 JF
MyTableCellEditor 的目的是使 JTable 单元格的行为类似于 Excel 单元格,IOW,单击单元格后输入值会覆盖而不是附加到现有值。我没想到下面的代码在第一遍就可以工作,但我确实
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我是一名优秀的程序员,十分优秀!