2010-10-05 12 views
2

J'ai une fonction createUI() qui charge JPanel en NORD, SUD, EST. Chaque composant est affiché à l'emplacement correct, mais tous les composants sont en JPanel de taille fixe. Je voudrais savoir s'il est possible que le JPanel remplisse complètement la région BorderLayout.Java Swing: positionnement relatif et redimensionnement automatique?

Par exemple, createDataView() est un Jpanel simple avec des tables. Je voudrais l'étendre horizontalement, et avoir une hauteur fixe.

private JPanel createDataView(){ 
     JPanel panel = new JPanel(); 

     String data[][] = {{"001","vinod","Bihar","India","Biology","65","First"}, 
          {"002","Raju","ABC","Kanada","Geography","58","second"}, 
          {"003","Aman","Delhi","India","computer","98","Dictontion"}, 
          {"004","Ranjan","Bangloor","India","chemestry","90","Dictontion"}, 
          {"004","Ranjan","Bangloor","India","chemestry","90","Dictontion"}}; 
     String col[] = {"Roll","Name","State","country","Math","Marks","Grade"}; 
     JTable table = new JTable(data,col); 
     table.setPreferredScrollableViewportSize(new Dimension(900,100)); 
     JTableHeader header = table.getTableHeader(); 
     header.setBackground(Color.yellow); 
     JScrollPane pane = new JScrollPane(table); 
     table.setAutoResizeMode(JTable.WIDTH); 
     table.doLayout(); 
     panel.add(pane); 
     return panel; 
}      

Maintenant, je compte sur le réglage manuel de la cote. Cependant, je voudrais un moyen d'obtenir la largeur de la fenêtre actuelle, et le définir comme ci-dessous.

table.setPreferredScrollableViewportSize(new Dimension(900,100)); 
+0

Vous avez deux choses bourrées dans la "cellule" SUD ... comment sont censées se regarder les unes par rapport aux autres? –

+0

a ajouté plus de détails ... – KJW

Répondre

1

La mise en page par défaut d'un nouveau JPanel est FlowLayout; un GridLayout peut être une alternative pour votre vue de données. Vous pouvez comparer les possibilités dans A Visual Guide to Layout Managers. Addendum

JPanel panel = new JPanel(new GridLayout(1, 0)); 

: Votre setAutoResizeMode() semble suspect; JTable.WIDTH est peu probable d'être seulement par coïncidence une valeur valide. GridLayout fonctionne bien avec la valeur par défaut, JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS, mais vous pouvez expérimenter avec d'autres paramètres.

table.setAutoResizeMode(JTable.WIDTH); 
+0

'WIDTH' est hérité de' ImageObserver' (implémenté tout le long par 'Component'), ce qui se trouve être le même que' JTable # AUTO_RESIZE_NEXT_COLUMN'. –

+0

@Geoffrey Zheng: Les deux 1! J'aurais dû regarder. Merci d'avoir clarifié cela. – trashgod

1

Avec BorderLayout, NORD, SUD, EST et OUEST frontières prennent tous la taille par défaut du panneau contenant, mais le centre se développe à prendre tout l'espace restant. Je suggère de mettre votre createDataView dans cette section de la mise en page.

+0

voulez-vous dire en mettant un conteneur JPanel dans CENTRE, et en plaçant le composant ici? – KJW

+0

ouais, changez add (createDataView(), BorderLayout.SOUTH); ajouter (createDataView(), BorderLayout.CENTER); – Codemwnci

+0

cela semble déjà chevaucher complètement le composant existant dans CENTER. de toute façon pour le faire côte à côte? Qu'en est-il si j'ai besoin de quelque chose dans SUD, CENTRE? – KJW

Questions connexes