Java JTable标头对齐
我想在我的JTable驱动类的标题中设置标签的垂直对齐 我知道设置垂直对齐(SwingConstants.BOTTOM)代码> 我的页眉比字体高得多,我想将文本略低于垂直中心 如何在不重写Java JTable标头对齐,java,swing,jtable,jtableheader,Java,Swing,Jtable,Jtableheader,我想在我的JTable驱动类的标题中设置标签的垂直对齐 我知道设置垂直对齐(SwingConstants.BOTTOM) 我的页眉比字体高得多,我想将文本略低于垂直中心 如何在不重写paint()的情况下执行此操作 THX其中一种方法是设置渲染器,表头默认返回JLabel final TableCellRenderer tcrOs = myTable.getTableHeader().getDefaultRenderer(); myTable.getTableHeader().
paint()
的情况下执行此操作
THX其中一种方法是设置
渲染器
,表头
默认返回JLabel
final TableCellRenderer tcrOs = myTable.getTableHeader().getDefaultRenderer();
myTable.getTableHeader().setDefaultRenderer(new TableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
JLabel lbl = (JLabel) tcrOs.getTableCellRendererComponent(table,
value, isSelected, hasFocus, row, column);
lbl.setForeground(AppVariables.textColor);
lbl.setBorder(BorderFactory.createCompoundBorder(lbl.getBorder(),
BorderFactory.createEmptyBorder(0, 5, 0, 0)));
lbl.setHorizontalAlignment(SwingConstants.LEFT);
if (isSelected) {
lbl.setForeground(Color.red);
lbl.setBackground(Color.lightGray);
} else {
lbl.setForeground(Color.blue);
lbl.setBackground(Color.black);
}
return lbl;
}
});
这是不可能的,JLabel的布局相当固定。您可以尝试设置一个适当大小的不可见图标,并将文本位置设置在图标下方。注意:这会与排序标记冲突,因为大多数LAF都使用图标。忘记了通常的特殊要求:为什么?因为关注如此微小的细节会让事情看起来更好。有时候你需要像一个平面设计师,而不是程序员一样思考:)然后你可能会结束整个LAF的写作:-)或者找到一个,商业的或免费的,有几个看起来很精致-注意细节顺便问一下,你的目标LAF是什么?这不是我问题的答案。仔细读这个问题。@Adam,这个问题我读了三遍。我仍然把我认为是你要找的答案贴在哪里。通常我可以从字里行间看出一个措辞拙劣的问题,但我想这次不行。下次发布一个正确的,这样我们就不必猜测了。在
TableCellRenderer
界面中没有方法setVerticalAlignment()
。必须将渲染器强制转换为DefaultTableCellRenderer
。找不到setVerticalAlignment。因此,代码在银行mKobel中不起作用!克莱奥:这是相关的。我需要的技巧就藏在那里。我所需要的只是:setBorder(BorderFactory.createCompoundBorder(getBorder(),BorderFactory.createEmptyBorder(6,0,0,0));好吧,我站在正确的位置上,实际上在混乱中忽略了那条线;-)仍然需要大量随机代码来简单地向渲染器添加边框。有时很难在整个林中看到树,因为您总是添加太多不必要的代码。
JTableHeader header = table.getTableHeader();
TableCellRenderer renderer = header.getDefaultRenderer();
renderer.setVerticalAlignment(SwingConstants.BOTTOM);