Java: динамически изменять высоту заголовка JTable - PullRequest
0 голосов
/ 03 апреля 2019

Выполнение следующего кода создает эту таблицу.

enter image description here

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;

public class TableHeaderTest extends JFrame 
{

    public TableHeaderTest()
    {
        JButton jb = new JButton("Change Header");
        JTextField jt = new JTextField(30);
        //headers for the table
        String[] columns = new String[] {
            "Id", "Name", "Hourly Rate", "Part Time"
        };

        //actual data for the table in a 2d array
        Object[][] data = new Object[][] {
            {1, "John ReallyLongLastName ", 40.0, false },
            {2, "Rambo", 70.0, false },
            {3, "Zorro", 60.0, true },
        };
        //create table with data
        JTable table = new JTable(data, columns);

        jb.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent arg0) 
            {
                JTableHeader th = table.getTableHeader();
                TableColumnModel tcm = th.getColumnModel();
                TableColumn tc = tcm.getColumn(1);
                tc.setHeaderValue( jt.getText());
                table.getTableHeader().invalidate();
                table.getTableHeader().repaint();
            }

        });

        //add the table to the frame
        JPanel pane = new JPanel();
        GridLayout gl = new GridLayout(1,2);
        pane.setLayout(gl);
        pane.add(jb);
        pane.add(jt);

        this.add(pane, BorderLayout.NORTH);
        this.add(new JScrollPane(table), BorderLayout.CENTER);

        this.setTitle("Table Example");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);       
        this.pack();
        setSize(400,200);
        this.setVisible(true);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TableHeaderTest();
            }
        });
    }   
}

enter image description here

Введите «Длинные имена сюда» в текстовое полеи нажмите кнопку «Изменить заголовок».

Можно ли динамически изменить высоту заголовка столбца (не ширину)?

enter image description here

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

...