Ich versuche gerade eine kleine GUI zu machen.
Da dabei einige buttons vorkommen wollte ich objektorientiert programmieren und eine seperate Klasse machen, bei der bereits die Größe des buttons festgelegt ist und die 2 Methoden hat, mit denen ich die Position und den Text ändern kann. Wenn ich jetzt in meiner Hauptklasse den button mit frame.add(Button1) hinzufügen will, geht das nicht, weil es ja eine ganze Klasse ist und nicht ein button, den ich in der selben klasse eingeführt habe.
Wie kann ich das trotzdem machen?
importjavax.swing.JFrame;publicclassHauptklasse{staticJFrame frame =newJFrame();staticButton button1 =newButton();publicstaticvoidmain(String[] args){Frame();Button();}staticvoidFrame(){
frame.setVisible(true);
frame.setBounds(300,200,100,100);
frame.setLayout(null);
frame.add(button1);//Hier ist der Fehler: "no suitable method found for add(Button)}staticvoidButton(){
button1.setVisible(true);
button1.setBounds(10,10,50,50);}}
Du solltest dir noch mal Java Grundlagen angucken.
Namensgebung -> Falsch
Aufbau -> Falsch
Deine extra Klasse macht irgendwie auch keinen Sinn... Du musst ja so oder so die Methoden aufrufen und die Sachen eingeben. Ist so ja eher doppelt gemoppelt...
Wozu also eine neue anlegen ? Arbeit ersparst du dir ja nicht gerade dadurch.
Ich denke, eine einfache Methode in deiner "Hauptklasse", würde in deinem Fall reichen.
Und: du hast 2 mains - wtf ? :bahnhof:
Du wolltest doch sicher eher einen Konstruktor der Klasse machen, oder ?
Deine Klasse Button ist zwar ein Button - sonst wuerde er ja nicht so heissen, aber das wars auch schon.
Um ihn im Swing Kontext verwenden zu koennen sollte er JButton erweitern.
Java:
publicclassButtonextendsJButton{}
hier kannst du im Konstruktor die Werte setzen, die du dafuer haben moechtest.
entweder direkt im Standardkonstruktor oder einem eigens definierten.
Eine Main Funktion hat in dieser Klasse NICHTS zu suchen - weg damit
Java:
importjavax.swing.JButton;publicclassButtonextendsJButton{String text;publicButton(){
jb.setSize(80,80);
jb.setVisible(true);}publicvoidsetPosition(int x,int y)//kann man weglassen, da JButton schon setLocation anbietet{this.setLocation(x,y);}}
die andere Klasse.
Java:
importjavax.swing.JFrame;publicclassHauptklasse{privateJFrame frame;privateButton button1;publicstaticvoidmain(String[] args){erzeugeNeuenFrame();erzeugeNeuenButton("TextAufDemButton");}staticvoiderzeugeNeuenFrame(){
frame =newJFrame();
frame.setVisible(true);
frame.setBounds(300,200,100,100);
frame.setLayout(null);
frame.add(button1);//Hier ist der Fehler: "no suitable method found for add(Button)}staticvoiderzeugeNeuenButton(String text){
button1 =newButton()
button1.setVisible(true);
button1.setText(text);
button1.setBounds(10,10,50,50);}}
Cool Danke!
Genau das was ich gesucht habe.
Dass mit der doppelten main methode war nur ein versehn, da ich dass nur schnell als beispiel geschrieben habe und normal in BlueJ programmiere, da braucht man keine main. Ich hab nur die methoden mit mein ausgetauscht.
Und in der Hauptklasse muss es natürlich heißen
Aber das war ja zum Glück nicht ausschlaggebend.
Ich wollte nur, falls ich beim Button noch mehr Daten vorher festlegen will, das in einer extra Klasse machen, damit ich es nicht immer neu schreiben muss.
Außerdem sagt unser Lehrer wir sollen objektorientiert programmieren, auch wenn es fraglich ist, ob sich das jetzt lohnt oder nicht.
Danke für deine Antwort