Swing: TableCellRenderer, который использует жирный шрифт для некоторых ячеек
Простой вопрос, но я не могу найти ответ где-нибудь в Интернете.
Как вы используете пользовательский TableCellRenderer для отображения некоторых ячеек таблицы жирным шрифтом?
Я знаю, как использовать TableCellRenderer, чтобы установить цвет фона для каждой ячейки. Вы делаете что-то вроде:
public class MyTableCellRenderer extends DefaultTableCellRenderer
{
@Override 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);
// modify the component "c" to have whatever attributes you like
// for this particular cell
}
}
Я бы предположил, что изменение стиля текста рендеринга аналогично, но как установить шрифт таким же, как шрифт таблицы по умолчанию, но жирным шрифтом?
5 ответов
Если вы уже можете получить шрифт таблицы по умолчанию (который, я полагаю, будет c.getFont()
), тогда просто используйте deriveFont(Font.BOLD)
в теме.
Возможно, вы также захотите рассмотреть метод рендеринга табличных строк, который может дать вам больше гибкости в управлении ячейками, для которых вы меняете шрифт. Я использовал его для выделения текста во всех столбцах выбранной строки.
Установка шрифта для полужирного с кэшированием, как описано здесь, будет работать.
Если вам нужно выделить только часть текста жирным шрифтом - используйте HTML. Рендереры таблиц основаны на JLabel
(или вы можете вернуть один). Преобразование вашего текста в HTML позволит изменить практически любой текстовый атрибут.
Мы широко используем эту технику и не видим существенного снижения производительности.
Вот подход ленивца: Использование DefaultTableCellRenderer
(который является подклассом JLabel
) и используйте HTML, чтобы указать, когда вы хотите использовать жирный шрифт.
Это будет не так эффективно, как определение собственного пользовательского рендерера и непосредственное управление шрифтами, но код, как правило, более компактен, поэтому подходит для простых приложений.
/**
* Renderer implementation for rendering Strings.
* Strings beginning with 'A' are rendered in bold.
*/
public class MyRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
String txt = String.valueOf(value);
if (txt != null && txt.startsWith("A")) {
// Reassign value as an HTML string.
// Obviously need to consider replacing HTML special characters
// if doing this properly.
value = String.format("<body><b>%s</b></body>", txt);
}
// Delegate to superclass which will set the label text, background, etc.
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
}
Вы можете использовать это также..
class SampleRenderer extends DefaultTableCellRenderer
{
public Component getJtableCellRendererComponent(Jtable table,Object value,boolean isSelected , boolean hasFocus , int row, int column)
{
JLabel c = (JLabel)super.getJtableCellRendererComponent(table,value,isSelected ,hasFocus , row, column);
Font f = c.getFont();
c.setFont(f.getName(),Font.BOLD,f.getSize()));
return c;
}
}