Кадр не показывает Панели, использующие MigLayout - PullRequest
0 голосов
/ 19 января 2012

возможно, это простая ошибка, но я не могу понять, что не так.У меня есть класс, который создает рамку (MainFrame) и использует метод для изменения панелей.У меня есть другой класс, у которого есть панель, описанная в нем.Однако почему-то я вижу только рамку без панели.Может ли кто-нибудь помочь мне здесь?Я новичок в MigLayout, и было бы здорово, если бы вы могли объяснить мою ошибку ..

public class MainFrame extends JFrame
{
private JPanel panel;

//getting dimensions
public static  Dimension dim = Toolkit.getDefaultToolkit().getScreenSize() ;

public MainFrame()
{
    getContentPane().setLayout(new MigLayout());
    setDefaultCloseOperation(DISPOSE_ON_CLOSE);

    this.setTitle("Title");
    this.setLocation((int)dim.getWidth()/3,(int)dim.getHeight()/4);
    this.setSize(500, 500);     

    setNewPanel(new MainWindowPanel());
    this.validate();
}

public final void setNewPanel(JPanel newPanel)
{
    //to change the panel, old one has to be deleted
    if (panel != null) remove(panel);

    getContentPane().setLayout(new MigLayout());
    add(newPanel);

    //pack();
    panel = newPanel;
    this.setVisible(true);  
}
}

Класс моей панели

   public class MainWindowPanel  extends JPanel
   {
//Label
JLabel greeting = new JLabel("Welcome:");

//Buttons
JButton helpButton = new JButton("Help?");

public MainWindowPanel() 
{

    // the layout of the main screen
    JPanel p = new JPanel(new MigLayout("fill", "[center]"));

    p.setBackground(Color.lightGray);
    p.add(greeting,  "skip 1, gaptop 40, wrap");
    greeting.setFont(times20);

    p.add(helpButton, "bottom, span, tag help");

    }
}

Спасибо!

1 Ответ

2 голосов
/ 19 января 2012

в конструкторе MainWindowPanel вы создаете новую панель и добавляете к ней кнопку / метку - без добавления вновь созданной панели. Добавьте следующую строку:

 add(p);

На самом деле, я не совсем понимаю, чего вы хотите достичь с помощью этих глубоко вложенных панелей, почему бы не

 public MainWindowPanel() {
      setLayout(new MigLayout( ... contraints);
      add(greetings);
      add(button);
 }

И пока вы в этом: подумайте о не расширении JPanel, а использовании это:

 JComponent mainWindowPanel = new JPanel(new MigLayout(...));
 JLabel greetings = ... // create and configure
 mainWindowPanel.add(greetings); 
 JButton button = ... // create and configure
 mainWindowPanel.add(button);
...