2013-12-02 6 views
0

Мне нужно программно добавить компоненты пользовательского интерфейса в существующую JPanel. Я не могу добавить компонент, который я добавляю.Невозможно программно добавить JPanel

Примечания:

  • почти весь код TestUI порождается NetBeans (мой метод находится в нижней части)
  • Я попытался установить jPanel1.validate(), jPanel1prevalidate(), и упаковка(), на основе других ответов я сталкивался

Main Class:

public class Test { 

    public static void main(String[] args) { 
     TestUI testUI = new TestUI(); 
     testUI.setVisible(true); 
     testUI.addAnotherPanel(); 
    }  
} 

UI Класс:

import javax.swing.JLabel; 

public class TestUI extends javax.swing.JFrame { 

    /** 
    * Creates new form TestUI 
    */ 
    public TestUI() { 
     initComponents(); 
    } 

    /** 
    * This method is called from within the constructor to initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is always 
    * regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 

     jPanel1 = new javax.swing.JPanel(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 
     jPanel1.setLayout(jPanel1Layout); 
     jPanel1Layout.setHorizontalGroup(
      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 400, Short.MAX_VALUE) 
     ); 
     jPanel1Layout.setVerticalGroup(
      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 300, Short.MAX_VALUE) 
     ); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
     ); 

     pack(); 
    }// </editor-fold>       

    // Variables declaration - do not modify      
    private javax.swing.JPanel jPanel1; 
    // End of variables declaration     

    void addAnotherPanel() { 
     jPanel1.add(new JLabel("Hello World.")); 
     jPanel1.revalidate(); 
    } 
} 

ответ

3

вы используете GroupLayout с jPanel1 (При использовании IDE как генератор GUI NetBean), но вы пытаетесь добавить компонент (JLabel) внутри функции addAnotherPanel() непосредственно с помощью функция jpanel1.add(component). Вам не нужно добавлять компонент непосредственно в контейнер - это делается для вас неявно GroupLayout при использовании одного из методов addComponent.

Однако GroupLayout не был предназначен для использования при компоновке компонентов с использованием ручной кодировки. Попробуйте дополнительно изучить LayoutManager. Подробнее см. How to Use GroupLayout.

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