2012-04-09 10 views
1

Ich bin ein JTable in ein JPanel wich Zugabe einer Gridlayout verwenden, aber ich das gleiche Verhalten nicht wie erhalten, wenn Sie eine JButton hinzufügen ...Wie wird eine JTable in ein JPanel eingefügt und automatisch skalierbar gemacht?

Ich möchte wissen, wie kann ich das gleiche Auto Redimensionierung erhalten Verhalten mit meiner JTable, wie wenn Sie eine JButton in ein JPanel hinzufügen, die ein GridLayout verwendet, und ich möchte auch, dass die Tabelle den gesamten Raum des Panels verwendet.

Sorry über Rechtschreibung, Englisch ist nicht meine Muttersprache. Hoffe ihr könnt mir helfen!

Dies ist mein Code:

import javax.swing.*; 
    import java.awt.*; 

    class Frame extends JFrame { 

     private JPanel center; 
     private JTable table; 

     public Frame(){ 
      super("Test Jtable"); 
      this.setLayout(new BorderLayout());   

      this.center = new JPanel(); 
      this.center.setLayout(new GridLayout()); 

      this.table = new JTable(50,50); 
      this.table.setGridColor(Color.black); 
      this.table.setCellSelectionEnabled(true);      

      this.center.add(this.table); 
      this.add(this.center,BorderLayout.CENTER); 
     } 
    } 

    public class TestFrame { 

     public static void main(String... args) { 
      Frame f =new Frame(); 
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      f.setSize(400,400); 
      f.setVisible(true); 
     } 
    } 

Antwort

1

Fügen Sie Ihre Tabelle in eine Bildlauffenster, wie in diesem example gezeigt.

this.center.add(new JScrollPane(this.table)); 

Nachtrag: Ich habe etwas wie dies mit pack() befürworten würde; andere Anordnungen sind möglich, aber weniger brauchbar. Die setPreferredScrollableViewportSize() Methode kann auch hilfreich sein.

import javax.swing.*; 
import java.awt.*; 

class Frame extends JFrame { 

    private JPanel center; 
    private JTable table; 

    public Frame() { 
     super("Test Jtable"); 
     this.setLayout(new BorderLayout()); 
     this.center = new JPanel(); 
     this.center.setLayout(new GridLayout()); 
     this.table = new JTable(50, 10); 
     this.table.setGridColor(Color.black); 
     this.table.setCellSelectionEnabled(true); 
     this.center.add(this.table); 
     this.add(new JScrollPane(this.center), BorderLayout.CENTER); 
    } 
} 

public class TestFrame { 

    public static void main(String... args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       Frame f = new Frame(); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       f.pack(); 
       f.setVisible(true); 
      } 
     }); 
    } 
+0

Beachten Sie den Unterschied zwischen Ihrem (expliziten) 'GridLayout' und dem (impliziten)' FlowLayout' des Beispiels. – trashgod

+1

Wenn Sie ein JButton in ein JPanel einfügen, belegt das JButton den gesamten JPanel und wenn Sie die Größe des Fensters ändern, passt das JButton automatisch auch die Größe an. Ich möchte dasselbe mit meiner JTable machen, genau in JPanel passen und die automatische Größenanpassung bekommen. – mrgamertag

+0

Möglicherweise möchten Sie ein Raster von Komponenten; mehr oben. – trashgod