2016-03-24 12 views
1

Şu anda JPanel kullanarak bir tablo yapısını gridbaglayout ile görüntülemek istiyorum, ancak bunu tasarlarken bazı sıkıntılarım var.Gridbaglayout ile Swing ekran tablosu yapısı

Verilerim düğüm yapısında (bir xml belgesinden ayrıştırılmıştır) saklanır. Kodumda, bir düğümün başka bir düğüm grubu varsa (yinelemeli yöntem showGroupField) her seferinde yeni bir panel oluşturur. Ayrıca bir tablo yapısı veren bir gridbagconstraint yaratan bir yöntem var. Sorun, ana panele yeni bir panel eklendiğinde, ana panelin tüm genişliğini kullanmamakla birlikte, gridbaglayout'un ilk sütunu ile yapışmasıdır. Bunu çözmenin bir fikri olan var mı? Çok teşekkürler!

Bu

şimdi ne var:

What I have now

Ve bu istediğim şudur:

What I want

Kodu: hiç inputPanel eklemek için

package view; 

import domain.NodeInfo; 

public class InputScreen { 

    ... 

    public InputScreen(Node parentNode){ 
     this.parentNode = parentNode; 
     nodeInfo = new NodeInfo(); 
    } 

    public void initiateInputScreen() { 
     mainFrame = new JFrame("Front-End Generator"); 
     mainFrame.setSize(1000,1000); 

     contentPanel = new JPanel(); 
     inputPanel = new JPanel(); 

     makeContentPanel(); 

     mainFrame.setContentPane(contentPanel); 
     mainFrame.pack(); 
     mainFrame.setLocationRelativeTo(null); 
     mainFrame.setVisible(true); 
     mainFrame.setResizable(false); 
    } 

    private void makeContentPanel() { 
     contentPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
     contentPanel.setLayout(new BorderLayout(5,5)); 

     makeInputPanel(); 

     contentPanel.add(inputPanel, BorderLayout.CENTER); 
    } 

    private void makeInputPanel() { 
     inputPanel.setBorder(BorderFactory.createTitledBorder("Inputs")); 
     inputPanel.setLayout(new GridBagLayout()); 

     inputPanel.add(new JLabel(nodeInfo.getNodeInformation(parentNode)), createGbc(0, 0)); 

     inputPanel.add(showGroupField(parentNode.getFirstChild()), createGbc(0,1));  
    } 

    private JPanel showGroupField(Node node) { 
     int count = 0; 
     JPanel tmpPanel = new JPanel(new GridBagLayout()); 
     tmpPanel.setBorder(BorderFactory.createTitledBorder("Test")); 

     NodeList listNode = node.getChildNodes(); 
     for(int i=0; i<listNode.getLength(); i++){ 
      if(nodeInfo.isGroupField(listNode.item(i))){ 
       tmpPanel.add(showGroupField(listNode.item(i)), createGbc(0, count)); 
       count++; 
      }else{ 
       tmpPanel.add(new JLabel("Test"), createGbc(0, count)); 
       tmpPanel.add(new JTextField(20), createGbc(1, count)); 
       count++; 
      } 
     } 
     return tmpPanel; 
    } 

    private GridBagConstraints createGbc(int x, int y){ 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridx = x; 
     gbc.gridy = y; 
     gbc.gridwidth = 1; 
     gbc.gridheight = 1; 

     gbc.anchor = (x==0) ? GridBagConstraints.WEST : GridBagConstraints.EAST; 
     gbc.fill = (x==0) ? GridBagConstraints.BOTH : GridBagConstraints.HORIZONTAL; 

     gbc.insets = (x==0) ? new Insets(5,0,5,5) : new Insets(5,5,5,0); 
     gbc.weightx = (x==0) ? 0.1 : 1.0; 
     gbc.weighty = 1.0; 
     return gbc; 
    } 
} 
+0

Daha iyi yardım için, daha önce bir [MCVE] veya [Kısa, Kendini İçeren, Doğru Örnek] (http://www.sscce.org/) gönderin. –

cevap

0

deneyin WEST pos ition.

contentPanel.add(inputPanel, BorderLayout.WEST);