Jak zrobić JTable zarówno AutoSize jak i horizontall scrollable?
Wstawiam JTable do jscrollpane
Ale kiedy ustawię JTable Auto Resizeable, wtedy nie będzie miał poziomego paska przewijania.
Jeśli ustawię AUTO_RESIZE_OFF, to Jtable nie wypełni szerokości kontenera, gdy szerokość kolumny nie jest wystarczająco duża.
Więc jak Mogę to zrobić:
- gdy tabela nie jest wystarczająco szeroka, rozwiń, aby wypełnić jej szerokość kontenera
- gdy stół jest wystarczająco szeroki, należy go przewijać.
Thanks
4 answers
Musisz dostosować zachowanie przewijanego interfejsu.
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);
}
}
Powyższy kod zasadniczo dopasowuje komponent do jego preferowanego rozmiaru lub rozmiaru widoku, w zależności od tego, która z tych wartości jest większa.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-24 01:48:50
Jeśli z jakiegoś powodu dostosowywanie JTable nie jest opcją (np. może być utworzone w kodzie innej firmy), możesz osiągnąć ten sam wynik, ustawiając przełączanie między dwoma różnymi trybami AUTO_RESIZE JTable, gdy tylko zmieni się rozmiar widoku, np.:
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);
}
}
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-27 22:11:34
Odkryłem, że wszystko, co jest potrzebne, to dołączyć
table = new JTable(model);
// this enables horizontal scroll bar
table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
A następnie po obliczeniu wymaganej szerokości i wysokości viewport, include
frame.getContentPane().add(new JScrollPane(table))
table.setPreferredScrollableViewportSize(new Dimension(width,height));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-19 06:21:41
Jeśli ustawisz układ kontenera na BorderLayout z BorderLayout.CENTER ograniczenie układu, wtedy JTable automatycznie zmieni rozmiar, aby dopasować go do swojego kontenera.
Jeśli chcesz, aby komponent był przewijalny, możesz zawinąć JTable za pomocą JScrollPane .
setLayout(new BorderLayout());
add(new JScrollPane(new JTable()), BorderLayout.CENTER);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-24 01:46:29