2012-05-04 6 views
8

У меня есть программа, в которой 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(){ 

    ... 

    } 

} 

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

+0

Вы должны размещать больше кода, так как то, что вы вывесили должны просто работать – Robin

+0

JPanel является компонентом. Код, который вы только что вставили, дает вам эту ошибку? – Charles

+0

Похоже, вы неправильно интерпретируете сообщение об ошибке; что такое * точное сообщение об ошибке? – rob

ответ

14
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(){ 
... 
} 
+1

К любопытству, есть ли причина, по которой вы не распространяли 'JFrame' прямо в' Test'? Я всегда это делаю, может быть, это плохая привычка? Upvoted. –

+2

@ Jean-FrançoisSavard Я не добавляю никакой функциональности или не изменяю какую-либо существующую функциональность фрейма, поэтому я просто использую простой экземпляр. Как правило, разработчики GUI поощряют расширение рамок или панелей (по какой-то веской причине я вижу). –

+0

Хорошо, что имеет смысл, Спасибо за быстрый ответ. –

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

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

0

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

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

frame.add(test.getPanel()); 

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

1

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

public class Test2 extends JPanel { 

Test2(){ 

... 

} 

Подробнее:

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

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

2

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

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(); 
     } 

} 
     ); 
} 

} 
+0

это должно помочь. он работает как прелесть для меня – sabbibJAVA

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