2013-08-23 7 views
0

У меня есть Jpanel по имени mainPanel и еще один класс по имени MyPanel, который распространяется JPanel. Я хочу добавить MyPanel в mainPanel. Я сделал этот код и не получил никакого результата.Добавление jpanel в jpanel в java

Это мой главный класс, который держит mainPanel:

import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 


public class Main extends JFrame { 

    private JPanel contentPane; 
    private final JPanel mainPanel = new JPanel(); 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        Main frame = new Main(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the frame. 
    */ 
    public Main() { 
     inItGUI(); 
    } 
    private void inItGUI() { 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 662, 417); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(null); 
     mainPanel.setBounds(25, 11, 611, 341); 

     contentPane.add(mainPanel); 
     mainPanel.setLayout(null); 

     mainPanel.add(new MyPanel());// **Here i added MyPanel** 
     mainPanel.revalidate(); 
     repaint(); 
    } 

} 

и это мой MyPanel класс, который имеет Beeb добавил к mainPanel ранее:

import java.awt.Component; 

import javax.swing.JPanel; 
import javax.swing.JButton; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 


public class MyPanel extends JPanel { 

    private final JButton btnNewButton = new JButton("New button"); 
    private final JButton btnNewButton_1 = new JButton("New button"); 
    public MyPanel() { 

     inItGUI(); 
    } 
    private void inItGUI() { 
     setLayout(null); 
     btnNewButton.setBounds(60, 49, 106, 43); 

     add(btnNewButton); 
     btnNewButton_1.setBounds(189, 49, 89, 43); 

     add(btnNewButton_1); 
    } 
} 
+0

Избавьтесь от любого учебника или веб-сайта, использующего нулевой макет. – camickr

ответ

4

Добро пожаловать в один из прекрасных ловушках null менеджеры макетов

Если вы удалите менеджер компоновки, вы удалите любой chan от ваших компонентов от автоматического размера и расположения.

В основном, это то, что MyPanel добавляется к mainPanel и положению 0x0 с размером 0x0, поэтому ничего не отображается.

Реальное решение использовать appropriate layout manager

Не обманывайте себя. Управление положением и размером компонентов, особенно взаимосвязь между компонентами, в области современных компьютерных систем является сложным. Вы должны уметь учитывать, как каждый компонент визуализируется на основе шрифта, DPI, ориентации и т. Д. Текущей системы, а затем учитывать, как это может повлиять на другие компоненты, которые используют один и тот же контейнер ... Вы также должны следить за изменениями в иерархии компонентов, к которым вы подключены ...

Это задание, которое планируют менеджеры макетов ... Swing разработан вокруг использования менеджеров макетов, и вы должны иметь ОЧЕНЬ хорошая причина игнорировать их ... IMHO

+0

Большое спасибо. Я борюсь с этой проблемой около двух часов. Я устанавливаю mainPanel как BorderLayout, и он работает. @ MadProgrammer – user2709253

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