У меня есть JTable с несколькими столбцами и потенциально очень много строк. Я хочу отображать только 3 строки за раз, и я хочу, чтобы ширина JTable составляла 400, , включая ширину полосы прокрутки.JTable внутри JScrollPane с фиксированной шириной
Вот код, который я до сих пор:
public class SwingDrivesMeMad
{
public static void main(String[] args)
{
Object[][] rowData = { {"Homer", "beer"},
{"Marge", "wine"},
{"Bart", "coke"},
{"Lisa", "water"},
{"Maggie", "milk"} };
Object[] headerData = { "name", "beverage" };
JTable table = new JTable(rowData, headerData)
{
public Dimension getPreferredScrollableViewportSize()
{
return new Dimension(400, getRowHeight() * 3);
}
};
JScrollPane scrollPane = new JScrollPane(table);
JFrame frame = new JFrame("learn you a barkeep for great good!");
frame.add(scrollPane);
frame.pack();
frame.setVisible(true);
}
}
Вот как это выглядит:
Высота совершенен. К сожалению, ширина 400 плюс ширина полосы прокрутки, в общей сложности 415. Это испортит макет, потому что есть графическая область с фиксированной шириной 400 непосредственно над таблицей, и оба компонента должны выстраиваться в линию в совершенстве. Наличие стола немного больше, просто выглядит плохо.
Конечно, я мог бы просто установить ширину 385, потому что в моей системе полосы прокрутки занимают 15 пикселей, но это не кажется очень портативным. Есть ли лучшее решение?
Вы пытались установить размер 'JScrollPane' вместо' JPanel'? – msrd0
Как установить его на жесткий кабель на 385 пикселей менее портативный, чем на 400? –
@ msrd0 Это отлично работает для ширины, но не для высоты, потому что заголовок не учитывается. Как получить высоту заголовка? 'scrollPane.getColumnHeader(). getHeight()' вызывает 'NullPointerException'. Кроме того, я не эксперт по Swing, но я читал бесчисленное количество раз, что 'setXXXSize' является злым. – fredoverflow