为什么此代码无法正常显示?

时间:2013-03-04 18:14:24

标签: java swing netbeans

为什么FieldBox面板上的JLabel,JTextField和JButton组件不显示?

如果我可以在此问题上添加任何内容以使其更易于回复,请告知我们。

字段框(为多个实例字段中的每一个创建其中一个):

public class FieldBox extends javax.swing.JPanel {
JLabel label;
JTextField textField;

public FieldBox() {
            setBackground(Color.RED);

    setLayout(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();

    label = new JLabel();
    gbc.gridx = 0;
    gbc.gridy = 0;
    add(label,gbc);

    textField = new JTextField();
    gbc.gridx = 1;
    gbc.gridy = 0;
    add(textField, gbc);

    JButton editBtn = new JButton("edit");
    gbc.gridx = 2;
    gbc.gridy = 0;
    add(editBtn, gbc);        


    JButton saveBtn = new JButton ("save");
    gbc.gridx = 3;
    gbc.gridy = 0;
    add(saveBtn, gbc);

    label.setVisible(true);
    label.setBackground(Color.yellow);


    setVisible(true);





    initComponents();
}

添加方框的面板:(面板出现。我知道这个面板加载,因为我可以看到它的背景。我也可以看到“tit”JLabel,我正在用它进行测试。此外,当我使用gridLayout将框加载到它上面(如下所示),我看到其中一个框的背景,但没有显示任何内容,并且还应显示三个框但我只看到一个。使用GridBagLayout

public class ShowBook extends javax.swing.JPanel {

public ShowBook(Book b) {
    setLayout(new GridLayout(1,6));
    setBackground(Color.GREEN);
       String[] fieldTitles = {"title",  "catalog", "publisher" };
    JLabel tit = new JLabel("tit");

    add(tit);


    for (String s : fieldTitles){
        FieldBox fb = new FieldBox();
        fb.label.setText(s + ": ");
        fb.textField.setText(getField(b, s));     
        System.out.println("in text field" + fb.textField.getText());
        fb.revalidate();
        fb.setVisible(true);
        add (fb);


    }
    revalidate();
   setVisible(true);
}

添加了ShowBook面板(上方)的面板。此面板还包含一个列表框,其中列出了集合中的书籍,以及一个用于启动ShowBook面板的按钮,其中所选书籍作为参数。

public class ShowLib extends javax.swing.JPanel {

/**
 * Creates new form ShowLib
 */
public ShowLib(Library l) {

    setLayout(new BorderLayout())  ;     
    setBackground(Color.WHITE);
    JPanel listPanel = new JPanel();
    listPanel.setLayout(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();

    final JList bookList = new JList();

    bookList.setVisible(true);
    bookList.setPreferredSize(new Dimension(150, 600));
    bookList.setBackground(Color.yellow);

    DefaultListModel dlm = new DefaultListModel();
    for (Book b : l.libList){
        dlm.addElement(b);
    }
    bookList.setModel(dlm);

    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.fill = gbc.BOTH;
    listPanel.add(bookList, gbc);

    JButton showBtn = new JButton("show");
    gbc.gridy = gbc.RELATIVE;
    listPanel.add(showBtn, gbc);


    showBtn.addActionListener(new ActionListener () {

        @Override
        public void actionPerformed(ActionEvent e){
            Book b = (Book) bookList.getSelectedValue();
            ShowBook db = new ShowBook (b);
            System.out.println("Clicked");
            add (db, BorderLayout.CENTER);
            revalidate();
        }


    });





    revalidate();
    setVisible(true);

    add(listPanel, BorderLayout.WEST);  

}

将ShowLib面板添加到主JFrame的位置。我知道这很有效,因为该面板显示正确

void showLib() {
    ShowLib sl = new ShowLib(l);
    sl.setVisible(true);
    setContentPane(sl);
    revalidate();
 //   this.revalidate();
//    this.pack();
    System.out.println("showlibClicked");
}

1 个答案:

答案 0 :(得分:0)

问题是FieldBox类底部的行initComponents();

获得的经验教训:如果您没有使用NetBeans可视化GUI编辑器,请获取此线路!