2012-12-04 35 views
0

我一直在研究Oxygen插件的視圖,並且無法讓GridBagLayout從頂部開始。目前,當您將內容添加到JPanel時,它會像下面的圖像一樣在div中垂直居中。內容從JPanel的vCenter開始

​​

// swing imports 
import javax.swing.JPanel; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 
import javax.swing.JCheckBox; 
import javax.swing.JButton; 
import javax.swing.JScrollPane; 
// awt imports 
import java.awt.Color; 
import java.awt.Insets; 
import java.awt.BorderLayout; 
import java.awt.GridBagLayout; 
import java.awt.GridBagConstraints; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

public class DBPediaPanel extends JPanel { 

    private JScrollPane scrollPane; 
    private JPanel scrollContent; 
    private JButton btnAcceptAll; 
    private int currentRow = 0; 

    public DBPediaPanel() { 
     this.setLayout(new BorderLayout()); 
     this.setBackground(Color.BLACK); 

     this.add(getScrollPane(), BorderLayout.CENTER); 

     btnAcceptAll = new JButton("Add Row"); 
     btnAcceptAll.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       addStringToList("row " + currentRow); 
       System.out.println("test"); 
      } 
     }); 
     this.add(btnAcceptAll, BorderLayout.SOUTH); 
    } 

    private JScrollPane getScrollPane() { 
     scrollContent = new JPanel(new GridBagLayout());; 

     scrollPane = new JScrollPane(scrollContent); 
     return scrollPane; 
    } 

    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.FIRST_LINE_START : GridBagConstraints.FIRST_LINE_START; 
     gbc.fill = (x == 0) ? GridBagConstraints.BOTH : GridBagConstraints.HORIZONTAL; 

     gbc.insets = (y == 0) ? new Insets(3, 5, 3, 5) : new Insets(0, 5, 3, 5); 
     gbc.weightx = (x == 0) ? 0.1 : 1.0; 
     gbc.weighty = 0.0; 

     return gbc; 
    } 

    public void addStringToList(String str) { 
     System.out.println("in addStringToList"); 
     System.out.println("attempting to add " + str + " to the list"); 

     GridBagConstraints gbc = createGbc(0, currentRow); 
     scrollContent.add(new JCheckBox(), gbc); 

     gbc = createGbc(1, currentRow); 
     scrollContent.add(new JTextField(str), gbc); 

     // revalidate and repaint the scrollContent to ensure it gets added to the view 

     scrollContent.layout(); 
     scrollContent.revalidate(); 
     scrollContent.repaint(); 

     currentRow++; 
    } 

} 

感謝您的幫助。我幾乎在那裏,但它似乎並沒有尊重gbc.anchor = GridBagConstraints.FIRST_LINE_START

回答

1

GridBagLayout規定是不組件從繞容器的中心默認

最常見的解決方案是將填料組分(如JLabel)中的最後一個位置,並設置其weightx/y爲1。在你的情況下,我會把它放在最後一排