编辑:[已解决]:似乎每次我尝试增加和减少字体大小时都会调用 CustomTableCellRenderer 的 getTableCellRendererComponent 。
所以我更新了我的代码来处理这个方法本身的字体大小。我正在使用一个静态变量来跟踪当前的字体大小(这是因为这个值会影响当前在我的 UI 中显示的所有表格的字体大小)
我已经更新了代码来解决这个问题。欢迎对此提出任何意见/反馈。再次感谢!
我要解决的问题是基于单击不同的 JLabel 动态更改(即增加/减少)JTable 中的字体大小
我有一个面板,其中包含两个标签(用于增加/减少字体大小)和一个 JTable。我在这个表上附加了一个自定义的 TableCellRenderer。
创建表的代码如下:
JTable table = new JTable(data, tableHeader){
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row,
int column) {
Component component = super.prepareRenderer(renderer, row, column);
int rendererWidth = component.getPreferredSize().width;
TableColumn tableColumn = getColumnModel().getColumn(column);
tableColumn.setPreferredWidth(Math.max(rendererWidth +
getIntercellSpacing().width + 10,
tableColumn.getPreferredWidth()));
return component;
}
};
table.setPreferredScrollableViewportSize(new Dimension(5000, 200));
table.setFillsViewportHeight(true);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setDefaultRenderer(table.getColumnClass(0), new CustomTableCellRenderer());
自定义 TableCellRenderer 实现如下:
public class CustomTableCellRenderer extends DefaultTableCellRenderer {
private Font customFont;
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
customFont = component.getFont();
customFont = new Font(customFont.getName(), customFont.getStyle(), MainUI.DEFAULT_TABLE_FONT_SIZE);
component.setFont(customFont);
if (value.toString().matches("(?i:.*error.*)")) {
c.setForeground(Color.RED);
} else {
c.setForeground(Color.BLACK);
}
return c;
}
public void increaseFontSize(){
MainUI.DEFAULT_TABLE_FONT_SIZE = getFont().getSize() + 1;
}
public void decreaseFontSize(){
MainUI.DEFAULT_TABLE_FONT_SIZE = getFont().getSize() + 1;
}
}
对于按钮,我附加了一个鼠标侦听器和 mouseClicked 事件,我正在尝试执行以下操作来实现该功能:
if(table.getDefaultRenderer(table.getColumnClass(0)) instanceof CustomTableCellRenderer){
CustomTableCellRenderer tableCellRenderer = (CustomTableCellRenderer) table.getDefaultRenderer(table.getColumnClass(0));
tableCellRenderer.increaseFontSize();
table.repaint();
}
但是我看表没有变化。我究竟做错了什么?以及如何实现所需的功能?
任何意见/建议将不胜感激。谢谢!