компоненты не отображаются при использовании JFrame - PullRequest
2 голосов
/ 01 сентября 2011

У меня проблема с JFrame и ключевым словом "this".Когда я использую frame.getContentPane, компоненты не отображаются, пока я не заменю frame на «this».Кажется, getContentPane не получает панель содержимого JFrame, он получает что-то еще, я не знаю, что это такое.Боюсь, у меня есть два разных компонента JFrame, хотя я объявил только один.Кто-нибудь может объяснить эту проблему?
Это мой код:

public class Form1 extends JFrame
{
    private static final long serialVersionUID = 1L;
    JFrame frame = new JFrame("TableLayout");
    Container content = frame.getContentPane();//this doesn't work unless I replace "frame" with the key word "this"///
public Form1 ()//constructor
{
    String label[] = {"Top", "Bottom", "Add", "Delete", "Center", "Overlap"};
     double border = 5;
     double size[][] =
      {{border, 0.20, border, TableLayout.FILL, border, 0.80, border},  // Columns
       {border, 0.15, border, TableLayout.FILL, border, 0.10, border}}; // Rows  
     JButton button[] = new JButton[label.length];
     for (int i = 0; i < label.length; i++)
     {
         button[i] = new JButton(label[i]);
     }
     content.add (button[0], "1, 1, 5, 1"); // Top (row,column)
     content.add (button[1], " 1, 5, 5, 5"); // Bottom
     content.add ((button[2], "1, 3      "); // Left
     content.add (button[3],"5, 3,      "); // Right
     this.pack();
    }
}

Ответы [ 2 ]

4 голосов
/ 01 сентября 2011
public class Form1 extends JFrame
{
    private static final long serialVersionUID = 1L;
    JFrame frame = new JFrame("TableLayout");

Ваш класс является фреймом и также имеет атрибут Frame с именем frame. Конечно, есть два кадра!

Изменить это ..

public class Form1 extends JFrame
{
    private static final long serialVersionUID = 1L;
    JFrame frame = new JFrame("TableLayout");
    Container content = frame.getContentPane();//this doesn't work unless I replace "frame" with the key word "this"///
public Form1 ()//constructor
{

К чему-то более похожему (определенные ответы приходят с SSCCE в вопросе) ..

public class Form1 extends JFrame
{
    private static final long serialVersionUID = 1L;
    Container content;

public Form1 ()//constructor
{
    super("TableLayout");
    content = getContentPane();
4 голосов
/ 01 сентября 2011

Ваш пример и extends JFrame и has-a JFrame.На первое ссылается this;последний на frame.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...