Изменение высоты заголовка JTable - PullRequest
0 голосов
/ 27 декабря 2018

С новым годом всех, у меня проблема с изменением высоты заголовка 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)); 

 }

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Есть много способов, которыми вы «можете» увеличить высоту заголовка, который вы выберете, будет зависеть от того, чего вы хотите достичь.Однако следует помнить одну вещь: пытаться найти решение, которое учитывает различные среды рендеринга, в которых может потребоваться ваша программа.

Вы можете ...

Простая смена шрифтаразмер.Это может звучать глупо, но вы будете удивлены, насколько все просто, например ...

DefaultTableModel model = new DefaultTableModel(10, 10);
JTable table = new JTable(model);
JTableHeader header = table.getTableHeader();
header.setFont(header.getFont().deriveFont(30f));

Font size

Вы можете...

Воспользуйтесь встроенной поддержкой 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 sufix = "</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)) + sufix;
    System.out.println(text);
    column.setHeaderValue(text);
}

Html

Вы можете ...

Просто укажите свойсобственный 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;
    }
});

Renderer

Что касается решений, то это, пожалуй, мое предпочтение, так как учитывает больше переменных, участвующих в определении предпочтительного размера самого заголовка столбца

0 голосов
/ 27 декабря 2018
import java.awt.*;
import java.awt.event.*;
import java.util.List;
import java.util.Arrays;
import javax.swing.*;
import javax.swing.table.*;

public class TableHeaderHeightTest {
  private static int HEADER_HEIGHT = 32;
  private JTable makeTable() {
    JTable table = new JTable(new DefaultTableModel(2, 20));
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    return table;
  }
  public JComponent makeUI() {
    JPanel p = new JPanel(new GridLayout(2,1));

    JTable table1 = makeTable();
    //Bad: >>>>
    JTableHeader header = table1.getTableHeader();
    //Dimension d = header.getPreferredSize();
    //d.height = HEADER_HEIGHT;
    //header.setPreferredSize(d); //addColumn case test
    header.setPreferredSize(new Dimension(100, HEADER_HEIGHT));
    p.add(makeTitledPanel("Bad: JTableHeader#setPreferredSize(...)", new JScrollPane(table1)));
    //<<<<

    JTable table2 = makeTable();
    JScrollPane scroll = new JScrollPane(table2);
    scroll.setColumnHeader(new JViewport() {
      @Override public Dimension getPreferredSize() {
        Dimension d = super.getPreferredSize();
        d.height = HEADER_HEIGHT;
        return d;
      }
    });
//         //or
//         table2.setTableHeader(new JTableHeader(table2.getColumnModel()) {
//             @Override public Dimension getPreferredSize() {
//                 Dimension d = super.getPreferredSize();
//                 d.height = HEADER_HEIGHT;
//                 return d;
//             }
//         });
    p.add(makeTitledPanel("Override getPreferredSize()", scroll));

    final List<JTable> list = Arrays.asList(table1, table2);

    JPanel panel = new JPanel(new BorderLayout());
    panel.add(p);
    panel.add(new JButton(new AbstractAction("addColumn") {
      @Override public void actionPerformed(ActionEvent e) {
        for(JTable t: list) {
          t.getColumnModel().addColumn(new TableColumn());
          JTableHeader h = t.getTableHeader();
          Dimension d = h.getPreferredSize();
          System.out.println(d);
        }
      }
    }), BorderLayout.SOUTH);
    panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
    return panel;
  }
  private static JComponent makeTitledPanel(String title, JComponent c) {
    JPanel p = new JPanel(new BorderLayout());
    p.add(c);
    p.setBorder(BorderFactory.createTitledBorder(title));
    return p;
  }
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        createAndShowGUI();
      }
    });
  }
  public static void createAndShowGUI() {
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.getContentPane().add(new TableHeaderHeightTest().makeUI());
    f.setSize(320, 320);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
}

Попробуйте это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...