2012-12-04 43 views
0

我有以下由按鈕和JScrollPane組成的JPanel。按鈕之後按JPanel不顯示更新

當按鈕被按下時,我希望它爲JScrollPane內的JPanel添加一個新行。問題沒有出現。我的代碼如下,我完全難住。

// 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.WEST : GridBagConstraints.EAST; 
     //gbc.fill = (x == 0) ? GridBagConstraints.NONE : 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 = 1.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); 
     scrollContent.repaint(); 
     scrollPane.repaint(); 

     currentRow++; 
    } 

} 
+3

您必須重新驗證並重新繪製容器。請參閱[this](http://stackoverflow.com/questions/6988317/dynamically-add-components-to-a-jdialog/6988341#6988341)以獲取更多信息。 – mre

回答

3

它通過重新驗證scrollContent解決。感謝mre