編集:[解決済み]:フォントサイズを増減しようとすると、CustomTableCellRendererのgetTableCellRendererComponentが毎回呼び出されるようです。
そこで、このメソッド自体でフォント サイズを処理するようにコードを更新しました。現在のフォント サイズを追跡するために静的変数を使用しています (これは、この値が現在 UI に表示されているすべてのテーブルのフォント サイズに影響するためです) 。
これを処理するためにコードを更新しました。これに関するコメント/フィードバックは大歓迎です。もう一度ありがとう!
私が解決しようとしている問題は、別の JLabel のクリックに基づいて JTable のフォント サイズを動的に変更 (つまり、増減) することです。
2 つのラベル (フォント サイズの増減用) と 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();
}
しかし、表に変化は見られません。私は何を間違っていますか?そして、どうすれば目的の機能を実現できますか?
コメントや提案をいただければ幸いです。ありがとう!