Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Da ich bereits ein bisschen Programmiererfahrung von JavaScript/C++/C# hab, hab ich mir mal erlaubt ein paar Kapitel zu überspringen...
Ich hab mich erstmal ein bisschen eingelesen und wollt mich dann sofort mit der Grafischen Programmierung befassn blos da haut net mal der Anfang hin..-.-"
package com.tutego.insel.ui.swing;
Code:
package com.tutego.insel.ui.swing;
import javax.swing.JFrame;
public class HelloSwingFrame
{
public static void main( String[] args )
{
JFrame f = new JFrame( "Das Fenster zur Welt" );
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f.setSize( 300, 200 );
f.setVisible( true );
}
}
wenn ich des einfüge kommt bei mir der Fehler:
The declared package "com.tutego.insel.ui.swing" does not match the expected package ""
@Override heisst, dass eine Methode überschrieben wird.
Wenn du ein Interface implementierst, überschreibst du genaugenommen keine Mehtode, deswegen der Fehler, zumindest in Java 5, in Java 6 ist das erlaubt.
mit extends kannst du auf bereits vorhandene Methoden der Oberklasse zugreifen oder die Oberklasse um gewisse Funktionalitäten erweitern oder ändern. Die Oberklasse kann auch Methoden vorschreiben, welche die Unterklasse mit Leben füllen muss.
bei implements musst du alle Methoden selbst umsetzen.
in deinem bsp hat die Oberklasse das interface nicht implementiert. Der einzige Nutzen der Unterklasse Magazin besteht darin, das du alle Methoden der Oberklasse erbst, aber zusätzlich noch nen Interface implementierst. Somit ist Magazin nach aussen hin GameObject und Buyable. Ohne Buyable könntest das Magazin also net kaufen
ich denke diese extends und implements-geschichte ist für jeden oop-anfänger ein wenig undurchsichtig, aber wenn man sich n bissel mit der Materie auseinandersetzt, dann kommt man auch hinter die grundidee des ganzen.
es ist egal wo die methoden stehen, wenn die Mthode so heißt wie die klasse und keinen Rückgabewert hat, ist es ein konstuktor
nochwas zu den interfaces, ein Interface ist dazu dar, um sicher zu gehen, das gewisse objekte gewisse eigenschaften besitzen...
CloseWindowImplementsAll muss windowClosed usw.. haben damit, es als WindowsListener arbeiten kann...
aja mach dir keine sorgen, wenn dir die sinnhaftigkeit von interfaces noch nicht ganz klar ist.. wenn man sich später mal mit großen objekt orientieren systemen und patterns beschäftigt wird klarer...
okey hab etz mal a bissl rumprobiert und stoß scho auf die nächste Frage:
Code:
class maus extends MouseAdapter
{
JButton button;
@Override
public void mouseClicked(MouseEvent e) {
if(e.getClickCount() > 2){
button.setText("lol");
}
}
}
public class test1
{
public static void main( String[] args )
{
JFrame test = new JFrame("testttest");
test.setSize(500, 500);
JButton t = new JButton("Hallo");
test.add(t);
test.setVisible(true);
maus neu = new maus();
neu.button=t;
neu.mouseClicked();
}
}
Diese funktion funktioniert weil ich keinen Type bei neu.mouseCklicked(); angebe.... Ich steh da abba auch voll auf der Leitung und wüsste etz gar net was ich da angeben könnte?
solche Funktionen werden zB vom Swing-Framework selbst aufgerufen durch eine Hierarchie von Aktionen .. da brauchst diese nicht explizit selbst aufrufen. den Maus-Adapter musst dafür vermutlich an eine Komponente hängen, welche damit umgehen kann. hab noch nicht explizit mit MouseAdapter gearbeitet als das ich dazu mehr sagen könnte. Aber bin mir sicher das es automatisiert abläuft, was du in der main noch heraufbeschwörst (Aufruf der clicked-Methode)
public class Test {
String s;
//Konstruktor
public Test(String s) {
this.s = s;
}
public void print() {
System.out.println(s);
}
public static void main(String[] args) {
Test hallo = new Test("Hallo");
Test tschuess = new Test("Tschuess");
hallo.print();
tschuess.print();
}
}
vielleicht so besser? ^^
das Objekt was grad den Kontrollfluss in den Konstruktor lenkt ist in dem Sinne das aktive Objekt, welches mittels "this" referenziert wird - Also entweder das Objekt, was durch "hallo" oder "tschuess" referenziert wird.
Ein "Fenster" (sprich JFrame) hat standardmäßig einen LayoutManager namens BorderLayout gesetzt. Der hat 5 Zonen: Norden, Süden, Osten, Westen, Mitte. Ein add() ohne weitere Angabe setzt die Komponente in die Mitte (Center). BorderLayout macht immer die Mitte so groß wie möglich -> riesen Textfeld.
Lösung 1: eine andere Zone angeben, z.B. Norden:
Also greifen wir zum Matroschka-Prinzip: Einen Container wie JPanel (mit dem richtigen Layout, z.B. FlowLayout oder GridLayout), Box oder JToolBar in den South-Bereich legen, und dann die Buttons in den gewählten Container packen.