大家新年快乐,我在更改 JTable 标头的高度时遇到问题,如果有人可以提供帮助,我将不胜感激。我正在使用的方法也改变了背景颜色等。谢谢
public static void ChangeJTableBackgroundColor(JTable InTable){
JTable mytable = InTable;
Color mycolor = new Color(248, 201, 171);
mytable.setOpaque(true);
mytable.setFillsViewportHeight(true);
mytable.setBackground(mycolor);
Color mycolorhead = new Color(249, 168, 117);
mytable.getTableHeader().setBackground(mycolorhead);
mytable.getTableHeader().setPreferredSize(new Dimension(1,50));
}
Run Code Online (Sandbox Code Playgroud)
您“可能”增加标题高度的方法有很多,您选择哪种方法取决于您想要实现的目标。但要记住的一件事是,尝试找到一种解决方案,尊重您的程序可能需要运行的不同渲染环境。
简单改变字体大小。这可能听起来很愚蠢,但你会惊讶于它实际上是多么简单,例如......
DefaultTableModel model = new DefaultTableModel(10, 10);
JTable table = new JTable(model);
JTableHeader header = table.getTableHeader();
header.setFont(header.getFont().deriveFont(30f));
Run Code Online (Sandbox Code Playgroud)
利用 Swing 的内置 HTML 支持。此示例设置一个具有已定义单元格高度的 HTML 表格
DefaultTableModel model = new DefaultTableModel(10, 10);
JTable table = new JTable(model);
TableColumnModel columnModel = table.getColumnModel();
String prefix = "<html><body><table><tr><td height=100>";
String suffix = "</td></tr></table></body><html>";
for (int col = 0; col < columnModel.getColumnCount(); col++) {
TableColumn column = columnModel.getColumn(col);
String text = prefix + Character.toString((char)('A' + col)) + suffix;
System.out.println(text);
column.setHeaderValue(text);
}
Run Code Online (Sandbox Code Playgroud)
只需提供您自己的TableCellRenderer作为表头的默认单元格渲染器。这有点棘手,因为很难模仿当前外观使用的默认渲染器,而且UIManager没有帮助。相反,您需要考虑使用“代理”方法,将所需的更改应用到现有的标头渲染器。
DefaultTableModel model = new DefaultTableModel(10, 10);
JTable table = new JTable(model);
JTableHeader header = table.getTableHeader();
TableCellRenderer proxy = header.getDefaultRenderer();
header.setDefaultRenderer(new TableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component comp = proxy.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (comp instanceof JLabel) {
JLabel label = (JLabel) comp;
label.setBorder(new CompoundBorder(label.getBorder(), new EmptyBorder(50, 0, 50, 0)));
}
return comp;
}
});
Run Code Online (Sandbox Code Playgroud)
就解决方案而言,这可能是我的首选,因为它考虑了确定列标题本身的首选大小所涉及的更多变量
| 归档时间: |
|
| 查看次数: |
1446 次 |
| 最近记录: |