Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTable标头对齐_Java_Swing_Jtable_Jtableheader - Fatal编程技术网

Java JTable标头对齐

Java JTable标头对齐,java,swing,jtable,jtableheader,Java,Swing,Jtable,Jtableheader,我想在我的JTable驱动类的标题中设置标签的垂直对齐 我知道设置垂直对齐(SwingConstants.BOTTOM) 我的页眉比字体高得多,我想将文本略低于垂直中心 如何在不重写paint()的情况下执行此操作 THX其中一种方法是设置渲染器,表头默认返回JLabel final TableCellRenderer tcrOs = myTable.getTableHeader().getDefaultRenderer(); myTable.getTableHeader().

我想在我的JTable驱动类的标题中设置标签的垂直对齐

我知道设置垂直对齐(SwingConstants.BOTTOM)

我的页眉比字体高得多,我想将文本略低于垂直中心

如何在不重写
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);