2016-05-09 17 views
0

Ich habe die folgende Struktur in einem Rahmen:Java Swing Resize-Panel innerhalb Content

Frame-> contentPane Panel-> topPanel Panel-> Tabelle

Dies ist der Code:

private JPanel contentPane; 
private JTable table; 
private JPanel topPanel; 

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       ShowList frame = new ShowList(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

public ShowList() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 675, 433); 

    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(null); 

    topPanel = new JPanel(); 
    topPanel.setBounds(76, 76, 491, 245); 
    contentPane.add(topPanel); 
    topPanel.setLayout(null); 

    table = new JTable(); 
    table.setBounds(0, 0, 491, 245); 
    topPanel.add(table); 
} 

Was ich erreichen möchte, ist, dass, wenn ich die Größe des Rahmens verändere, das Fenster größer macht, das topPanel und die Tabelle, die es enthält, auch die Größe ändert und nicht die gleiche Größe wie vor der Größenänderung des Rahmens behält. Ich habe über Layouts gelesen, aber ich kann es nicht funktionieren lassen. Irgendein Vorschlag?

+0

Warum rufen Sie ShowList() mit neuem Schlüsselwort auf? Es ist weder Klasse noch Methode. –

+0

Java-GUIs müssen auf verschiedenen Betriebssystemen, Bildschirmgrößen, Bildschirmauflösungen usw. mit verschiedenen PLAFs in verschiedenen Locales arbeiten. Als solche sind sie nicht für ein perfektes Pixel-Layout geeignet. Verwenden Sie stattdessen Layout-Manager oder [Kombinationen davon] (http://stackoverflow.com/a/5630271/418556) zusammen mit Layout-Auffüllung und Rahmen für [Leerraum] (http://stackoverflow.com/a/17874718/ 418556). –

Antwort

3

Verwenden Sie einen LayoutManager, um die Größe und Position der Komponenten in Ihrem Rahmen zu steuern. Vermeiden Sie die Einstellung des Layout-Managers Ihrer Panels als null.

Ich empfehle Ihnen, einen Blick auf diesen Link zu werfen: "A Visual Guide to Layout Managers", um mehr über die verschiedenen Arten von Layouts zu erfahren, die Sie verwenden können.

In Ihrem Code, zum Beispiel, würde ich einen Border verwenden:

contentPane.setLayout(new BorderLayout()); 

...

contentPane.add(topPanel, BorderLayout.CENTER); 
topPanel.setLayout(new BorderLayout()); 

...

topPanel.add(table, BorderLayout.Center); 

By the way, ich nehme an Ihre Klasse ShowList erweitert JFrame weil Methoden wie setDefaultCloseOperation Ihnen einen Fehler geben, wenn nicht, richtig?

Ich hoffe es hilft.