Ms_*_*Joe 2 java swing jtable tablecellrenderer
我有一个Jtable,它从一组值中填充.我的代码是这样的:
private static final String[] columnNames = {"Line Number", "Error","Fix Proposed","Percentage (%)"};
static DefaultTableModel model = new DefaultTableModel(null,columnNames);
public static void DisplayMyJList(List<CaptureErrors> x,String extension,
ArrayList<Integer> l,ArrayList<Integer> p,
ArrayList<String> e,ArrayList<String> s) throws IOException {//Method to Dynamic get values to be populated in Jtable.
String theExtension = extension;
if(FILE_EXTENSION.equals("java")) {
for(CaptureErrors ex: x) {
Vector row = new Vector();
row.add(ex.getLinenumber());
row.add(ex.getMyfounderror());
row.add(ex.getMycorrection());
row.add(ex.getMyPercentage()+"%");
model.addRow( row );
//model.setRowColour(1, Color.YELLOW);
}
}
table = new JTable(model);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setFillsViewportHeight(true);
table.setShowGrid(true);
table.setShowVerticalLines(true);
table.setGridColor(new Color(0,128,0));
JTableHeader header = table.getTableHeader();
table.setBackground(new Color(255,228,225));
table.setEnabled(true);
header.setFont(new Font("Dialog", Font.CENTER_BASELINE, 12));
header.setBackground(Color.black);
header.setForeground(Color.yellow);
JScrollPane pane4 = new JScrollPane(table);
Run Code Online (Sandbox Code Playgroud)
我可以通过使用JButton从值数组填充Jtable.我希望有一个条件,如果列"百分比",获取此列中的所有值> 30,它会突出显示color.red的行.
我不想使用TableCellRendererComponent.我希望在单击Jbutton时执行此操作.
实际的Jtable看起来像这样:

然后根据我想要的内容,前两行应以红色突出显示.任何帮助赞赏.
渲染API的一个问题是难以提供复合渲染器.有办法做,不要误会我的意思,但内置它会很好... [结束咆哮] ......
基本思想是您要设置一系列从基础渲染器扩展的渲染器,该渲染器包含确定在所需条件下应该执行的操作所需的逻辑.
public class FilterRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
Double percent = (Double) table.getValueAt(row, 3);
// You'll need some way to supply the filter value, may via a centralised
// manager of some kind.
if (percent > 0.3 && !isSelected) {
setOpaque(true);
setBackground(Color.RED);
} else {
setOpaque(false);
}
return this;
}
}
public class OtherCellRenderer extends FilterRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
// Apply any special renderer requirements, like translating an object value to String
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
您需要为每列提供自定义渲染器(从您的示例,即4),并将每个列应用于表列
TableColumnModel model = table.getColumnModel();
model.getColumn(0).setCellRenderer(new LineNumberRenderer());
model.getColumn(1).setCellRenderer(new ErrorRenederer());
model.getColumn(2).setCellRenderer(new FixProposedRenderer());
model.getColumn(3).setCellRenderer(new Percentage());
Run Code Online (Sandbox Code Playgroud)
或者你可以使用SwingLabs JXTable,它内置支持行荧光笔
| 归档时间: |
|
| 查看次数: |
22613 次 |
| 最近记录: |