Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Swing layout don't automatically re-layout when a preferred size changes, you'll have to call revalidate (best probably with a TableModelListener which checks if the row count has changed). You also need a layout which sizes the component according to its preferred size, BorderLayout does that for the component in the borders (but not for the one in the center. For a different manager you'll need GridBag or better Mig-/Form- or Table (third party) Layout</p> <pre><code>import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.DefaultTableModel; public class TestTableLayout { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { final JPanel panel = new JPanel(new BorderLayout()); panel.setPreferredSize(new Dimension(400, 400)); final DefaultTableModel model = new DefaultTableModel(0, 1); JTable table = new JTable(model) { @Override public Dimension getPreferredScrollableViewportSize() { // view port size should be the same as the preferred size // limited to the height threshold Dimension size = super.getPreferredSize(); size.height = Math.min(size.height, 100); return size; } }; new Timer(1000, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { model.addRow(new Object[] { "Extra row!" }); // trigger a relayout of the panel panel.revalidate(); panel.repaint(); } }).start(); panel.add(new JScrollPane(table), BorderLayout.PAGE_START); JLabel label = new JLabel("my label"); label.setVerticalAlignment(JLabel.TOP); panel.add(label, BorderLayout.CENTER); JFrame frame = new JFrame("Test"); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.getContentPane().add(panel); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload