hi,
sry hab es gestern nicht mehr geschafft on zu kommen. also so wie ich das sehe verwendest du in deinem programm swing, awt und swt. das is natürlich reichlich und auch nicht unbedingt notwendig. swt is ein etwas aelteres paket um eine benutzeroberflaeche zu erstellen (bsp. eclipse wurde in swt erstellt). vorteil von dem swt is eben das es auch allen systemen gleich aussieht, weil es eben native ist. die klasse die du aus swt verwendest, ist die canvas. musste mich erstmal wieder einlesen in das thema. aber canvas sind fast gleichbedeutend mit panels (awt) oder den jpanels (swing). von der leistung her sind swt und swing gleich auf und es macht auch keinen grossen unterschied, allerdings werden sie soweit ich weiss, kaum noch eingesetzt.
awt verwendest du u.a. mit der klasse toolkit, die dir das bild importiert. konnte den teil leider nicht testen, weil ich grade kein z. h. hatte. zu guter letzt ist dein jbutton aus dem paket swing. grundsaetzlich kann man sagen du haettest bei deinem programm auf swt komplett verzichten koennen und das programm nur mit awt und swing programmieren koennen und dir sehr, sehr viel arbeit ersparen koennen.
hab das programm im wesentlichen nicht veraendert, sondern einfach nur nachgeschaut an was das liegen koennte. dein jbutton wird dargestellt genauso wie dein canvas. allerdings wird dein button vom canvas verdeckt. hab als erstes versucht mit layout managern eine gewisse positionierung zu erreichen aber da du ja mittels
alle layout manager abschaltest, wird das nicht viel bringen. dein button und dein canvas positionierst du mittels setbound, das auch nur dann sinn macht wenn man den lay.man. abgeschaltet hat.
den auruf der methode
taetigst du an dem falschen platz, die methode blockiert den aufbau des fensters d.h. an dieser stelle wird angehalten um das fenster staendig anzeigen zu koennen, aus diesem grund solltest du die methode nach allen initialisierungsoperationen
aufrufen.
zu gute letzt die groesse von deinem canvas das zum schluss auch den button verdeckt
. die groesse ist etwas zu gross und sollte kleiner gewaehlt werden. hab dem canvas mal eine andere hintergrundfarbe gegeben, damit man besser sehen kann wie und wo der entlang laeuft. du musst einfach nur die auskommentiert methode aktivieren.
dein programm ist im allg. sehr sehr unstrukturiert. kann dir nur das openbook vom ullenboom empfehlen, da steht alles gut erklaert drin. wenn du mal sehen moechtest wie das programm mit panels aussieht dann schreib einfach.
hier der source:
Code:
public class Game extends Frame implements WindowListener, ActionListener,Runnable {
private static final long serialVersionUID = 1L;
private MyCanvas canv = new MyCanvas();
private ImageIcon icon1 = new ImageIcon("Start.jpg");
private JButton b1 = new JButton(icon1);
public Game() {
super("Das Spiel");
this.addWindowListener(this);
// fuer lm deaktivieren
this.setLayout(null);
this.setResizable(false);
this.setBounds(150, 50, 500, 450);
this.setBackground(Color.white);
b1.setText("Hans");
b1.setBackground(Color.GRAY);
b1.addActionListener(this);
// unnoetig bei lm
b1.setBounds(375, 275, 100, 35);
// kleiner
canv.setSize(300, 300);
// zum testen, welche masse canvas hat
//canv.setBackground(new Color(0,0,0));
// die location ist default (0,0) bei deaktiviertem lm
canv.setLocation(0, 0);
canv.addKeyListener(canv);
canv.addMouseListener(canv);
// canvas und button dem frame hinzufuegen
this.add(canv);
this.add(b1);
}
public static void main(String[] args) {
Game game = new Game();
//nach initialisierung wird alles angezeigt
game.setVisible(true);
}
}
gruss tuney