Выравнивание заголовка JTable

Я хотел бы установить вертикальное выравнивание метки в заголовке моего класса с поддержкой JTable.

Я в курсеsetVerticalAlignment(SwingConstants.BOTTOM);

Мой заголовок намного выше, чем шрифт, и я хотел бы разместить текстчуть ниже вертикальный центр.

Как я могу это сделать, не переопределяяpaint() ?

Спасибо

 kleopatra16 дек. 2011 г., 11:03
это невозможно, макет JLabel довольно фиксирован. Что вы можете попробовать, так это установить невидимый значок соответствующего размера и установить положение текста ниже значка. Осторожно: это будет конфликтовать с маркерами сортировки, так как большинство LAF используют значок как таковой.
 kleopatra16 дек. 2011 г., 11:45
тогда вы, вероятно, закончите писать весь LAF :-) Или найдете один, коммерческий или бесплатный, есть несколько, выглядящих довольно отточенными -с участием внимание к деталям
 kleopatra16 дек. 2011 г., 11:47
Кстати, какова ваша цель LAF?
 kleopatra16 дек. 2011 г., 11:04
забыл обычное для необычных требований: почему?
 Adam16 дек. 2011 г., 11:41
Потому что внимание к таким крошечным деталям делает вещи лучше. Иногда нужно думать как графический дизайнер, а не как программист :)

Ответы на вопрос(2)

JTableHeader header = table.getTableHeader();
TableCellRenderer renderer = header.getDefaultRenderer();
renderer.setVerticalAlignment(SwingConstants.BOTTOM);
 1000ml20 янв. 2017 г., 18:40
Там нет методаsetVerticalAlignment() вTableCellRenderer интерфейс. Рендер должен быть приведен кDefaultTableCellRenderer.
 Adam16 дек. 2011 г., 11:38
Это НЕ ответ на мой вопрос. Прочитайте вопрос более внимательно.
 camickr16 дек. 2011 г., 17:34
@ Адам, я прочитал вопрос 3 раза. Я все еще отправил то, что я думал, был ответ, который Вы искали. Обычно я могу прочитать прочитанное между строк для плохо сформулированного вопроса, но, думаю, не в этот раз. В следующий раз опубликовать правильныйSSCCE поэтому нам не нужно угадывать.
Решение Вопроса

один из способов установитьRenderer, TableHeader по умолчанию возвращает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;
            }
        });
 camickr16 дек. 2011 г., 17:33
Еще много случайного кода, чтобы просто добавить границу для рендера. Иногда трудно увидеть дерево сквозь лес, потому что вы всегда добавляете столько ненужного кода.
 kleopatra16 дек. 2011 г., 10:58
случайный код, не связанный с вопросом
 mKorbel16 дек. 2011 г., 11:55
рад помочь +1
 kleopatra16 дек. 2011 г., 11:58
ладно, я исправлюсь, фактически пропустил эту строку во всем беспорядке ;-)
 Adam16 дек. 2011 г., 11:52
Спасибо, Макобел! Клео это связано. Уловка, в которой я нуждался, похоронена там. Все, что мне нужно было: setBorder (BorderFactory.createCompoundBorder (getBorder (), BorderFactory.createEmptyBorder (6, 0, 0, 0)));

Ваш ответ на вопрос