Название объясняет вопрос. Как я могу легко это сделать?
Как изменить высоту заголовка JTable?
Ответы (6)
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);
}
}
person
aterai
schedule
27.07.2012
mKorbel спасибо :), клеопатра не использует setXXSize это точно.
- person aterai; 30.07.2012
@aterai Это мило, очень мило. Раньше я использовал плохой способ и столкнулся с проблемой, которую вы показали выше. На самом деле не мог понять, в чем причина .. Большое спасибо, ценю ваши усилия!
- person Sumudu; 30.07.2012
попробуй это.....
if jtable attached to scrollpane
then
table.getTableHeader().setPreferredSize(
new Dimension(scrollpane.getwidth(),height)
);
else
table.getTableHeader().setPreferredSize(
new Dimension(width,height)
);
person
Venkatesh Bandarapu
schedule
27.11.2014
Если я сделаю по-вашему, то заголовок таблицы не прокручивается вместе со строками. Если я сделаю это по-атерейски, то заголовок будет прокручиваться вместе со строками.
- person Jeff Holt; 09.04.2018
Font bigFont = new Font("sansserif", Font.PLAIN, 24); // or whatever
myTable.getTableHeader().setFont(bigFont);
Это простой способ увеличить предпочтительный размер заголовка таблицы. Это увеличит высоту заголовка, но если ваши имена столбцов слишком длинные, они могут не соответствовать ширине.
person
bitguru
schedule
07.07.2018
Спасибо за этот фрагмент кода, который может предоставить некоторую ограниченную немедленную помощь. правильное объяснение значительно улучшит его долгосрочную ценность, показав, почему это хорошее решение. к проблеме и сделает его более полезным для будущих читателей с другими подобными вопросами. Пожалуйста, отредактируйте свой ответ, чтобы добавить некоторые пояснения, включая сделанные вами предположения.
- person Tim Diekmann; 08.07.2018
Попробуй это
JTableHeader th = table.getTableHeader();
th.setPreferredSize(new Dimension(100, 100));
person
adjieq
schedule
30.05.2017
Вместо переопределения JViewport.getPreferredSize, как в ответе aterai, вы можете просто установить предпочтительную ширину.
JScrollPane scroll = new JScrollPane(table2);
scroll.getColumnHeader().setPreferredSize(new Dimension(0, HEADER_HEIGHT));
JScrollPane игнорирует ширину заголовка столбца, поэтому вы можете смело устанавливать здесь ноль.
person
SVlad
schedule
15.06.2018
Вы также можете использовать очень большую ширину при установке предпочтительного размера заголовка, который усекается в соответствии с требуемой шириной в модели столбца.
tableHeader.setPreferredSize(new Dimension(10000, HEADER_HEIGHT));
person
Carlos
schedule
11.01.2013
прочитайте ответы на этот вопрос а> :
- person bobndrew; 06.06.2013