Как сделать JTable как AutoResize, так и horizontall прокручиваемым?
я помещаю JTable в JScrollPane
но когда я устанавливаю Jtable Auto Resizeable, тогда у него не будет горизонтальной полосы прокрутки.
Если я установил AUTO_RESIZE_OFF, то Jtable не будет заполнять ширину своего контейнера, когда ширина столбца недостаточно велика.
Итак, как я могу это сделать:
- когда таблица недостаточно широка, разверните ее, чтобы заполнить ширину контейнера
- когда таблица достаточно широка, сделайте ее прокручиваемый.
спасибо
4 ответов
необходимо настроить поведение прокручиваемого интерфейса.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableHorizontal extends JFrame
{
public TableHorizontal()
{
final JTable table = new JTable(10, 5)
{
public boolean getScrollableTracksViewportWidth()
{
return getPreferredSize().width < getParent().getWidth();
}
};
table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
final JScrollPane scrollPane = new JScrollPane( table );
getContentPane().add( scrollPane );
}
public static void main(String[] args)
{
TableHorizontal frame = new TableHorizontal();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setSize(400, 300);
frame.setVisible(true);
}
}
приведенный выше код в основном определяет размер компонента по его предпочтительному размеру или размеру окна просмотра, в зависимости от того, что больше.
Если по какой-то причине настройка JTable не является опцией (например, она может быть создана в стороннем коде), вы можете достичь того же результата, установив его для переключения между двумя различными режимами JTABLE AUTO_RESIZE при изменении размера содержащего окна просмотра, например:
jTable.getParent().addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(final ComponentEvent e) {
if (jTable.getPreferredSize().width < jTable.getParent().getWidth()) {
jTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
} else {
jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
}
}
});
я обнаружил, что все что нужно-это включить
table = new JTable(model);
// this enables horizontal scroll bar
table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
а затем, когда необходимая ширина и высота окна просмотра были рассчитаны, включите
frame.getContentPane().add(new JScrollPane(table))
table.setPreferredScrollableViewportSize(new Dimension(width,height));
Если вы установите макет своего контейнера в BorderLayout С BorderLayout.Центр ограничение макета, затем JTable автоматически изменит размер, чтобы соответствовать его контейнеру.
Если вы хотите сделать компонент прокручиваемым, вы можете обернуть JTable с помощью JScrollPane.
setLayout(new BorderLayout());
add(new JScrollPane(new JTable()), BorderLayout.CENTER);