我有此代码从如何突出显示jtable中的多个单元格:
private static class CellHighlighterRenderer extends JLabel implements TableCellRenderer {
public CellHighlighterRenderer() {
setOpaque(true); // Or color won't be displayed!
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
String val = (String)value;
Color c;
if (val.matches(".*MIN.*")) // Add a method to configure the regexpr
c = Color.YELLOW; // Add a method to configure color
else
c = UIManager.getColor("Table.background");
setBackground(c);
setText(val);
return this;
}
}
但是,当我用它突出显示一个单元格时,它会执行错误的操作,就像丢失整个数据一样。Iam是Java
Swing的新手。请帮助使单元格在按钮按下动作事件中突出显示。
更新:添加我的示例代码:
package myPackage;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.table.TableCellRenderer;
public class JTableCreatingDemo {
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object rowData[][] = { { "Row1-Column1"},
{ "Row2-Column1" } ,{ "Row3-Column1"},{ "Row4-Column1"},};
Object columnNames[] = { "Column One" };
final JTable table = new JTable(rowData, columnNames);
JButton button = new JButton("Highlight cell-1");
//Add action listener to button
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
table.setDefaultRenderer(Object.class, new CellHighlighterRenderer());
}
});
JPanel pnl = new JPanel();
pnl.add(button);
JScrollPane scrollPane = new JScrollPane(table);
frame.add(scrollPane, BorderLayout.CENTER);
frame.add(pnl,BorderLayout.SOUTH);
frame.setSize(300, 150);
frame.setVisible(true);
}
}
class CellHighlighterRenderer extends JLabel implements TableCellRenderer {
/**
*
*/
private static final long serialVersionUID = 1L;
public CellHighlighterRenderer() {
setOpaque(true); // Or color won't be displayed!
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
String val = (String)value;
Color c;
if (isSelected) // Add a method to configure the regexpr
c = Color.YELLOW; // Add a method to configure color
else
c = UIManager.getColor("Table.background");
setBackground(c);
setText(val);
return this;
}
}
我想要的是单击按钮,我只想突出显示单元格编号1(Row1-Column1)。
我使用此类来设置JTables的样式
public class CellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object obj, boolean isSelected, boolean hasFocus, int row, int column) {
Component cell = super.getTableCellRendererComponent(table, obj, isSelected, hasFocus, row, column);
if (isSelected)
cell.setBackground(Color.YELLOW);
else if (column == 0)
cell.setBackground(new Color(0xDDDDD));
else
cell.setBackground(new Color(0xFFFFFF));
return cell;
}
创建此类的实例,并将其应用于需要设置样式的单元格。您可以使用isSelected参数编辑单元格突出显示颜色。
编辑
感谢您更新的示例,这是一个用于更改单元格渲染器的切换按钮的示例
首先使用默认的表格单元格渲染器为单元格创建颜色样式
public class CellHighlighterRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object obj,
boolean isSelected, boolean hasFocus, int row, int column) {
Component cell = super.getTableCellRendererComponent(table, obj, isSelected, hasFocus, row, column);
cell.setBackground(Color.YELLOW);
return cell;
}
创建您的JFrame并添加JTable和按钮
public class Main extends JFrame {
public Main() {
super("Table Demo");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(300, 300));
setLocationRelativeTo(null);
setLayout(new BorderLayout());
DefaultTableModel model = new DefaultTableModel();
model.setColumnCount(5);
model.setRowCount(5);
JTable table = new JTable();
table.setModel(model);
//Get an instance of the column and the style to apply and hold a default style instance
final TableColumn column = table.getColumnModel().getColumn(1);
final CellHighlighterRenderer cellRenderer = new CellHighlighterRenderer();
final TableCellRenderer defaultRenderer = column.getCellRenderer();
//Now in your button listener you can toggle between the styles
JButton button = new JButton("Click!");
button.addActionListener(new ActionListener() {
private boolean clicked = false;
@Override
public void actionPerformed(ActionEvent e) {
if (clicked) {
column.setCellRenderer(cellRenderer);
clicked = false;
} else {
column.setCellRenderer(defaultRenderer);
clicked = true;
}
repaint(); //edit
}
});
getContentPane().add(table, BorderLayout.CENTER);
getContentPane().add(button, BorderLayout.NORTH);
pack();
setVisible(true);
}
public static void main(String[] args) {
new Main();
}
希望这可以帮助
编辑 我添加了一个重新绘制以清理最后一个示例。如果您只想定位特定的单元格,请更改表格单元格渲染器以仅渲染所需的单元格,如下所示
@Override
public Component getTableCellRendererComponent(JTable table, Object obj,
boolean isSelected, boolean hasFocus, int row, int column) {
Component cell = super.getTableCellRendererComponent(table, obj, isSelected, hasFocus, row, column);
//add condition for desired cell
if (row == 1 && column == 1)
cell.setBackground(Color.YELLOW);
return cell;
}
问题内容: 每当单元格的内容与用户的输入匹配时,我都希望突出显示JTable中的特定行。以下代码是我到目前为止可以使用的代码: 注意:是在源文件中全局作用域。 现在,此操作在某种程度上可行,但是我将其添加到内的。JTables是在程序运行时动态创建的。但是,该方法会使所有已创建的JTables中的所有特定单元格突出显示。 如何在所有JTable中保留单元格以保留其特定的突出显示单元,而不是让所有J
我在excel和VBA方面还算新手。 如果一直试图找到一种方法来实现下面的场景,但不能。我也试着在网上搜索解决方案,但找不到。
在我的java摇摆应用程序中,我想突出显示jtable中的某些行。用java怎么可能做到这一点。提前感谢。
问题内容: 我正在寻找一种方法来在表格单元格中显示动画进度指示器(动画GIF,通过Java2D渲染的旋转轮等,此处没有首选项),直到计算或检索出最终显示的值为止。 到目前为止,我只是在尚未准备好加速显示的每个单元格中放置了一个静态的“待处理…”文本。当数据从后台线程到达时,我将其放入适当的单元格中并在表上调用repaint。 使用静态标签或图像可以很好地工作,但是由于单元格渲染仅将其用作橡皮图章,
我是RichTextFX新手,需要一些帮助。我想使用StyleClassedTextArea(见https://github.com/FXMisc/RichTextFX)。 我的简单java代码: 但是,如图所示,没有突出显示任何内容。有人知道我如何用红色(或我做错了什么)渲染一定范围内的文本吗?
我有几十个专栏,我想突出重复。我对公式有意见。这是我所拥有的: 我也试过: 谷歌表格说:无效的公式。它有什么问题?有没有一种简单的方法来代替一个接一个地输入所有的列?