JTable 更改列字体
Posted
技术标签:
【中文标题】JTable 更改列字体【英文标题】:JTable change Column Font 【发布时间】:2013-04-13 09:32:33 【问题描述】:我正在制作一个表格,我想在第一列中使用更大的字体大小。
例如,在第 0 列中,我希望字体大小为 30,在第 1-3 列中,我希望字体大小为 13。
这是我的代码
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.*;
public class kanji_list extends JFrame
kanji_list()
JTable table = new JTable();
JScrollPane scroll = new JScrollPane();
Image icon = Toolkit.getDefaultToolkit().getImage("JLPT.jpg");
ImageIcon ima = new ImageIcon("JLPT.jpg");
DefaultTableModel model = new DefaultTableModel(get_data(), get_header());
table = new JTable(model)
public boolean isCellEditable(int rowIndex, int vColIndex)
return false;
;
JTableHeader th = table.getTableHeader();
TableColumnModel tcm = th.getColumnModel();
TableColumn column = null;
table.setFont(new Font("Microsoft JhengHei", Font.BOLD, 13));
for (int i = 0; i < 4; i++)
column = table.getColumnModel().getColumn(i);
DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();
tcr.setHorizontalAlignment(SwingConstants.CENTER);
column.setCellRenderer(tcr);
if (i==0)
column.setPreferredWidth(50);
else
if(i==1)
column.setPreferredWidth(175);
else
if(i==2)
column.setPreferredWidth(200);
else
column.setPreferredWidth(875);
table.setRowHeight(table.getRowHeight()+30);
table.setModel(model);
scroll.add(table);
this.add(scroll);
this.setTitle("Katakana");
this.setSize(1350, 700);
this.setIconImage(icon);
this.setVisible(true);
this.setLocationRelativeTo(null);
scroll.setViewportView(table);
Object [][]get_data()
Object data[][] = new Object[][]
"\u4e00", "Uno, 1", "ICHI, ITSU", "hito-, hitotsu",
"\u4e8c", "Dos, 2", "NI, JI", "futa, futatsu, futatabi",
"\u4e09", "Tres, 3", "SAN, JOU", "mi, mitsu, mittsu",
"\u99c5", "Estación", "EKI", ""
;
return data;
String []get_header()
String header [] = new String[]"KANJI", "SIGNIFICADO", "LECTURA ON", "LECTURA KUN";
return header;
这是一个日语学习系统,第一列 unicode 上的汉字在我的 13 号字体中根本看不到,但是如果我将所有表格都设置为更大的尺寸,那么所有其他列都会变大并且它不会看起来不太好。
【问题讨论】:
【参考方案1】:在核心 JTable 中,您基本上需要一个自定义渲染器,它将 Font 设置为与表格字体 f.i 不同的东西。在 DefaultTableCellRenderer 的子类中。请注意,实例化后在 DefaultTableCellRenderer 上设置一次字体将不起作用,因为它在每次调用 getTableCellRendererComponent 时都会重置。
JTable table = new JTable(new AncientSwingTeam());
// the default renderer uses the table's font,
// so set it as appropriate
table.setFont(fontToUseForAllColumnsExceptFirst);
// a custom renderer which uses a special font
DefaultTableCellRenderer r = new DefaultTableCellRenderer()
Font font = fontToUseForFirstColumn;
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column)
super.getTableCellRendererComponent(table, value, isSelected, hasFocus,
row, column);
setFont(font);
return this;
;
// doesn't work because the default renderer's font is reset
// to the table's font always
// r.setFont(font);
// set the custom renderer for first column
table.getColumnModel().getColumn(0).setCellRenderer(r);
另一种方法是渲染器装饰方法,在 SwingX 项目中支持(偏向于我无法抗拒 :-) 那么上面将是一个两行(假设表是 JXTable 类型):
Highlighter hl = new FontHighlighter(font);
table.getColumnExt(0).setHighlighter(hl);
【讨论】:
请问table.getTableHeader().setFont(new Font(null, Font.PLAIN, 23));
有什么问题(不包括 Nimbus)
@mKorbel 没有错 :-) 只是这与我理解的问题无关:它是关于每列的字体,与表格的字体不同。
+1,对不起,我什至没有看到你的答案。我会删除我的,让你的优先出现。
@kleopatra 我试过了,但都出错了,我还是 java 的学生,你能帮我把代码放到我的代码中吗?或者也许用简单的话向我解释它是如何工作的?因为我仍然不能很好地理解它是如何工作的
@Frakcool 嗯.. 没有太多要解释的了,这是相当基本的,所有要做的。如果你有问题,你可以考虑阅读教程中关于渲染的章节(链接在swing tag wiki,也就是上面的信息标签)以上是关于JTable 更改列字体的主要内容,如果未能解决你的问题,请参考以下文章