Выполнение следующего кода создает эту таблицу.
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();
}
});
}
}
Введите «Длинные имена сюда» в текстовое полеи нажмите кнопку «Изменить заголовок».
Можно ли динамически изменить высоту заголовка столбца (не ширину)?
Поскольку метка заголовка вводится через текстовое поле, она может иметь различную длину.Ключ ширина не должна меняться, только высота заголовка.