[英]After JTable cell setDefaultRenderer to jTextArea how to highlight the selected row in jTextArea
[英]JTable/setDefaultRenderer Multiple Selected Rows
我已经在整个互联网上进行了搜索,但找不到解决我问题的可行解决方案。
我有一个JTable
,我想动态更改多行的背景颜色而不影响其他行的背景颜色,这些颜色可能已经被更改。
颜色变化由ContextMenu
的JMenuItem
上的actionListener
触发,如下所示:
到目前为止,我尝试的代码如下:
JMenu highlightMenu = new JMenu("Highlight");
// Add null
for (Color color : Arrays.asList(Color.RED, Color.ORANGE, Color.YELLOW, Color.GREEN, Color.BLUE, Color.MAGENTA,
Color.PINK, Color.GRAY)) {
JMenuItem x = new JMenuItem();
x.setOpaque(true);
x.setBackground(color);
highlightMenu.add(x);
x.addHierarchyListener(e -> x.setText(tab.getTable()
.getValueAt(tab.getTable().getSelectedRow(), tab.getTable().getColumn("Server").getModelIndex()).toString()));
x.addActionListener(e -> IntStream.of(tab.getTable().getSelectedRows())
.forEach(row -> ((Component) tab.getTable().getModel().getValueAt(row, 0)).setBackground(color)));
// x.addActionListener(e -> {
// IntStream.of(tab.getTable().getSelectedRows())
// .forEach(r -> tab.getTable().setDefaultRenderer(Object.class, new
// DefaultTableCellRenderer() {
// @Override
// public Component getTableCellRendererComponent(JTable table, Object value,
// boolean isSelected,
// boolean hasFocus, int row, int column) {
// Component comp = super.getTableCellRendererComponent(table, value,
// isSelected, hasFocus, row, column);
// if (r == row) {
// comp.setBackground(color);
// } else {
// comp.setBackground(null);
// }
// return comp;
// }
// }));
// tab.getTable().repaint();
// });
}
如果有人有有效的解决方案,请分享,将不胜感激! 😁
您可以保留将行索引映射到颜色的地图,并在您的默认渲染器中使用它。 在动作侦听器中,您只需将具有指定颜色的行索引放入此映射中。
如果您使用Object.class
作为列类型,则只需为表设置一次默认渲染器。
final Map<Integer, Color> highlightedRows = new HashMap<>();
highlightedRows.put(1, Color.GREEN);
highlightedRows.put(2, Color.YELLOW);
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
final var cmp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
cmp.setBackground(highlightedRows.get(row));
return cmp;
}
});
结果
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.