Ik heb een programma waarin een JPanel wordt toegevoegd aan een 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(){
...
}
}
Ik krijg een foutmelding waarin ik wordt gevraagd het type ‘paneel’ te wijzigen in ‘component’. Ik repareer deze fout?
Het wil dat ik het volgende doe: Componentenpaneel = nieuwe Component();
Antwoord 1, autoriteit 100%
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(){
...
}
Antwoord 2, autoriteit 20%
doe het eenvoudig
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();
}
}
);
}
}
Antwoord 3, autoriteit 7%
In plaats van dat uw Test2-klasse een JPanel bevat, zou u deze een subklasse JPanel moeten hebben:
public class Test2 extends JPanel {
Test2(){
...
}
Meer details:
JPanelis een subklasse van Component , dus elke methode die een Component als argument neemt, kan ook een JPanel als argument nemen.
Oudere versies lieten je niet direct toevoegen aan een JFrame; je moest JFrame.getContentPane().add(Component) gebruiken. Als u een oudere versie gebruikt, kan dit ook een probleem zijn. Met nieuwere versies van Java kunt u JFrame.add(Component) rechtstreeks aanroepen.
Antwoord 4
Test2 test = new Test2();
...
frame.add(test, BorderLayout.CENTER);
Weet je dit zeker? test
is GEEN onderdeel!
Om te doen wat u probeert te doen, moet u Test2
JPanel
laten uitbreiden!
Antwoord 5
Uw klasse Test2
is geen Component
, het heeft een Component
, wat een verschil is.
Of je doet iets als
frame.add(test.getPanel() );
nadat je een getter voor het panel in je klas hebt geïntroduceerd, of je zorgt ervoor dat je Test2
-klas een Component
wordt (bijvoorbeeld door een JPanel
)