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.
Ich habe mit einigen Tutotials angefangen und komme nun nicht weiter.
Java:
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import javax.swing.JFrame;
public class Test implements ComponentListener{
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame f = new JFrame("Test");
f.setSize(600,200);
f.setTitle("Man nennt es \"Das Fenster\"");
f.setVisible(true);
//f.addComponentListener(this);
System.out.println("test");
}
public void componentHidden(ComponentEvent arg0) {
// TODO Auto-generated method stub
}
public void componentMoved(ComponentEvent arg0) {
// TODO Auto-generated method stub
}
public void componentResized(ComponentEvent arg0) {
// TODO Auto-generated method stub
}
public void componentShown(ComponentEvent arg0) {
// TODO Auto-generated method stub
}
}
1. Ich bekomme eine Fehlermeldung das ich den Listener nicht im static void nutzen kann. Warum?
2. Mein Ziel ist es eine Art "Einrast" Funktion des Fensters zu erreichen.
Dazu will ich die aktuelle Größe des Desktops abgreifen mit Toolkit.getDefaultToolkit().getScreenSize(), das klappt.
ABER ich kapiere nicht ganz wie ich den componentMoved() nutze um nun das Fenster bei Annäherung an den Rand des Desktops mit hilfe von setPosition zu verschieben.
PS: Bitte in einfachen Sätzen ^^ und denkt daran Ihr habt auch mal angefangen
static: es gehört zu der Klasse (oder alle besitzen es)
non-static: es gehört zu der Instanz (dem was mit new erstellt worden ist).
Nun:
In der statischen Methode gibts kein this. Die statische Methode gehört allen, und darum ist sie nicht an eine Instanz gebunden (this).
In einer nicht-statische Methode würde es ein this geben. Dies wäre die Instanz, welche die Methode aufgerufen hat.
Was kann man jetzt machen:
Ein neues Objekt Test erstellen und dieses als Listener hinzufügen.
Wäre es dann nicht sinnvoll in statischen Methoden die keinem Objekt zugeordnet sind nur die anderen Methoden aufzurufen? Sprich alles mit nicht statischen Methoden zu machen und die static Main void relativ klein zu lassen?
sprich so...
Java:
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import javax.swing.JFrame;
public class Test implements ComponentListener{
public static void main(String[] args) {
// TODO Auto-generated method stub
Test a = new Test( "Rasten" );
a.rasten();
}
public Test(String string) {
// TODO Auto-generated constructor stub
}
public void rasten(){
JFrame f = new JFrame("Test");
f.setSize(600,200);
f.setTitle("Man nennt es \"Das Fenster\"");
f.setVisible(true);
f.addComponentListener(this);
System.out.println("test");
}
public void componentHidden(ComponentEvent arg0) {
// TODO Auto-generated method stub
}
public void componentMoved(ComponentEvent arg0) {
// TODO Auto-generated method stub
}
public void componentResized(ComponentEvent arg0) {
// TODO Auto-generated method stub
}
public void componentShown(ComponentEvent arg0) {
// TODO Auto-generated method stub
}
}
Hier wäre es sinnvoll, darauf hinzuweisen, dass GUIs auf dem EDT erzeugt werden müssen. Auch wenn es in der Regel mit einer Sun-JRE auch funktioniert, wenn man die GUI im Main-Thread aufbaut...
Das sieht oft so aus:
Java:
...
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGui();
}
});
}
static void createAndShowGui() {
Test a = new Test( "Rasten" );
a.rasten();
}
...
public void fenster(){
JFrame f = new JFrame("Test");
f.setSize(600,200);
f.setTitle("Man nennt es \"Das Fenster\"");
f.setVisible(true);
f.addComponentListener(this);
int momposx = f.getX();
int momposy = f.getY();
if (f.getX()<= 20){
f.setLocation(0, momposy);
}
if (f.getY()<= 20){
f.setLocation(momposx, 0);
}
System.out.println(momposx);
System.out.println(momposy);
}
Ich kann das Fenster beim starten der App zwar genau positionieren, aber wie binde ich nun den Listener ein um eine Einrastfunktion zu bekommen??