2013-03-04 2 views
0

Почему компоненты JLabel, JTextField и JButton на панели FieldBox не отображаются?Почему этот код не отображается правильно?

Пожалуйста, дайте мне знать, если я могу что-то добавить к этому вопросу, чтобы сделать его более ответственным!

Блок поле (один из которых создается для каждого из нескольких полей экземпляра):

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(); 
} 

панель, на которую добавлены коробки: (появляется панель я знаю эту панель нагрузок, потому что я могу. см. его фон.Я также могу увидеть JLabel «tit», который я использую для тестирования. Кроме того, когда я загружаю на него квадраты с помощью 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"); 
} 
+2

Является ли ваш код коротким, самодостаточным, правильным и управляемым? –

ответ

0

Проблема была линия initComponents(); в нижней части класса FieldBox.

Извлеченный урок: если вы не используете визуальный графический редактор NetBeans, ПОЛУЧАЙТЕ ЭТО ЛИНИЮ!

+1

* «Извлеченный урок: если вы не используете визуальный графический редактор NetBeans, ПОЛУЧАЙТЕ ЭТО ЛИНИЮ!» * Это глупость. Если вы понимаете, что обычно делает IDE в этом методе, вы можете закодировать приложения. В нем построено GUI. Для людей, использующих смешанный графический интерфейс и бесплатный код формы, довольно часто используется одна и та же базовая структура и подпись кода для обоих. –

Смежные вопросы