Hallo!
Ich habe eine JTable, welche in einem JScrollPane liegt. Wird die Tabelle nun so mit Daten befüllt, dass sie zu hoch wird, um komplett angezeigt zu werden, so sollte eine JScrollBar erscheinen.
Diese tuts aber nicht sofort, sondern erst, wenn ich die Größe des JFrame verändere. Hier ein kurzer Beispielcode:
Habe schon wie wild mit validate() und repaint() auf alle möglichen Komponenten rumprobiert, jedoch ohne Erfolg. Konnte bisher auch nichts zu dem Thema finden. Ist wahrscheinlich auch nur eine kleine Sache. Was fehlt denn?
Ich habe eine JTable, welche in einem JScrollPane liegt. Wird die Tabelle nun so mit Daten befüllt, dass sie zu hoch wird, um komplett angezeigt zu werden, so sollte eine JScrollBar erscheinen.
Diese tuts aber nicht sofort, sondern erst, wenn ich die Größe des JFrame verändere. Hier ein kurzer Beispielcode:
Java:
public class JTableExample extends JTable {
private final List<Integer> data;
private int count = 0;
public JTableExample() {
this.data = new ArrayList<Integer>();
setModel(new AbstractTableModel() {
private final String[] columnNames = {"Zahlen"};
@Override
public int getRowCount() {
return data.size();
}
@Override
public String getColumnName(int column) {
return columnNames[column];
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return data.get(rowIndex);
}
});
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.getContentPane().setLayout(new BorderLayout());
final JTableExample table = new JTableExample();
final JScrollPane pane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
table.setFillsViewportHeight(true);
pane.setPreferredSize(new Dimension(100, 100));
frame.add(pane, BorderLayout.CENTER);
JButton button = new JButton("Klick!");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
table.data.add(table.count++);
table.repaint();
}
});
frame.add(button, BorderLayout.NORTH);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}