it-swarm.com.ru

Добавление JPanel в JFrame

У меня есть программа, в которой JPanel добавляется в JFrame:

public class Test{

    Test2 test = new Test2();
    JFrame frame = new JFrame();

    Test(){

    ...
    frame.setLayout(new BorderLayout());
    frame.add(test, BorderLayout.CENTER);
    ...

    }

    //main

    ...

    }

    public class Test2{

    JPanel test2 = new JPanel();

    Test2(){

    ...

    }

}

Я получаю сообщение об ошибке с просьбой изменить тип «панели» на «компонент». Я исправлю эту ошибку? Она хочет, чтобы я сделал: Панель компонентов = новый Компонент ();

8
Anonymous181
public class Test{

Test2 test = new Test2();
JFrame frame = new JFrame();

Test(){
...
frame.setLayout(new BorderLayout());
frame.add(test, BorderLayout.CENTER);
...
}

//main
...
}

//public class Test2{
public class Test2 extends JPanel {

//JPanel test2 = new JPanel();

Test2(){
...
}
15
Andrew Thompson

сделай это просто

public class Test{
    public Test(){
        design();
    }//end Test()

public void design(){
    JFame f = new JFrame();
    f.setSize(int w, int h);
    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    f.setVisible(true);
    JPanel p = new JPanel(); 
    f.getContentPane().add(p);
}

public static void main(String[] args){
     EventQueue.invokeLater(new Runnable(){
     public void run(){
         try{
             new Test();
         }catch(Exception e){
             e.printStackTrace();
         }

 }
         );
}

}
3
sabbibJAVA

Вместо того, чтобы ваш класс Test2 содержал JPanel, вы должны иметь его подкласс JPanel:

public class Test2 extends JPanel {

Test2(){

...

}

Подробнее:

JPanel является подклассом Component, поэтому любой метод, который принимает Компонент в качестве аргумента, также может принимать JPanel в качестве аргумента.

Старые версии не позволяли добавлять непосредственно в JFrame; Вы должны были использовать JFrame.getContentPane (). add (Component). Если вы используете более старую версию, это также может быть проблемой. Более новые версии Java позволяют напрямую вызывать JFrame.add (Component).

1
rob
Test2 test = new Test2();
...
frame.add(test, BorderLayout.CENTER);

Ты уверен в этом? test НЕ является компонентом! Чтобы делать то, что вы пытаетесь сделать, вы должны позволить Test2 extension JPanel!

0
StepTNT

Ваш класс Test2 не является Component, у него есть Component, что является разницей.

Либо вы делаете что-то вроде

frame.add(test.getPanel() );

после того, как вы ввели класс для панели в своем классе или убедитесь, что ваш класс Test2 становится Component (например, путем расширения JPanel)

0
Robin