Eigene Button anzeigen

nightyX

Grünschnabel
Hallo, ich hab da mal ein kleines Problem wo ich nich weiterkomme.

Ich habe mir eine eigene Button Klasse erstellt von JButton abgeleitet und habe die Button über eine for schleife auf ein JPanel gepackt.
Es wird aber leider nur der 1. Button angezeigt mit einer komischen weisen Umrandung. Klicke ich nun auf die anderen Button (ich weiß ungefähr wo die liegen) werden die angezeigt.

Kann mir da jemand weiterhelfen?

Source Code:
public class MainPanel extends JPanel{
private JTestButton b;

public MainPanel(){
super();
setLayout(new GridLayout(3,3));

for ( int i=0;i<3;i++){
for ( int j=0;j<3;j++ ){
b = new JTestButton(j,i);
this.add(b);
}
}
}

public static void main(String[] args) {
JFrame f=new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(new MainPanel());
f.pack();
f.setVisible(true);
}
}

public class JTestButton extends JButton{
private int x;
private int y;

public JTestButton(int x, int y){
super("hallo test" + x +y);
setX(x);
setY(y);
}

... // Setter & Getter
}


Vielen Dank

nightyX
 
Original geschrieben von nightyX
Hallo, ich hab da mal ein kleines Problem wo ich nich weiterkomme.

Ich habe mir eine eigene Button Klasse erstellt von JButton abgeleitet und habe die Button über eine for schleife auf ein JPanel gepackt.
Es wird aber leider nur der 1. Button angezeigt mit einer komischen weisen Umrandung. Klicke ich nun auf die anderen Button (ich weiß ungefähr wo die liegen) werden die angezeigt.

Kann mir da jemand weiterhelfen?

Vielen Dank

nightyX

Ich leider nicht, denn auch diesmal funktioniert der Beispielcode. Ich habe den mal eben in Eclipse kopiert, funktioniert einwandfrei. 9 Buttons werden angezeigt, oben links beginnend mit hallo test00. Sieht bei mir dann so aus:

hallo test00 hallo test10 hallo test20
hallo test01 hallo test11 hallo test21
hallo test02 hallo test12 hallo test22

Eine Idee hätte ich noch: setz doch mal für das JFrame die preferredSize, z.B.
f.setPreferredSize(400,400);
f.setMinimumSize(400,400);
 
Hallo,

das ist ja sehr komisch. Hab den Code schon einigen anderen ausprobieren lassen, bei denen kam es jedoch auch zu dem Problem.

Welche JRE nutzt du denn? Vielleicht liegt es ja daran. Ich nutze zur Zeit 1.4.1_05.
Oder gibts noch andere Sachen woran das liegen könnte?

Leider muss ich dir sagen, daß bei jedem Resize der Fehler wieder auftritt und setPrefferedSize konnt ich nur am Panel machen. Beim JFrame gibts setSize das hat aber irgendwie nix gebracht.

aber trotzdem vielen Dank nochmal

nightyX
 
Jemand eine Idee?

Original geschrieben von nightyX
Hallo,

das ist ja sehr komisch. Hab den Code schon einigen anderen ausprobieren lassen, bei denen kam es jedoch auch zu dem Problem.

Welche JRE nutzt du denn? Vielleicht liegt es ja daran. Ich nutze zur Zeit 1.4.1_05.
Oder gibts noch andere Sachen woran das liegen könnte?

aber trotzdem vielen Dank nochmal

nightyX

Da staunt der Fachmann und wundert sich der Laie. Denn:

Fall 1: Zu Hause läuft es einwandfrei mit dem JRE 1.4.1_01 Eclipse 2.1.1
Fall 2: @work läuft es nicht mit dem JRE 1.4.1_01 Eclipse 2.1.3
Fall 3: @ork läuft es nicht mit dem JRE 1.3.1_02 Eclipse 2.1.3
(alle 3 unter Win2000 prof)

Wenn jemand eine Idee hat, ich wäre sehr neugierig auf die Lösung.
Dass die Buttons nur bei Click angezeigt werden ist schon merkwürdig. Noch merkwürdiger finde ich, dass alle bis auf einen wieder verschwinden, wenn man das Frame mit der Maus in der Größe verändert.
 
Dummer Fehler meinerseits

Hallo, ich habs jetzt herausgefunden.

habe ja am Ende des Codes "... // Getter & Setter" geschrieben.
Ja und die hatte ich dann auch bei mir und zwar getX(), getY() usw. Tja hätte mir ja auch auffallen können, daß die schon weiter oben angesiedelt sind und ich die dadaurch überschreibe.

Mein Fehler... jetzt klappts

Danke nochmal für die Mühe

nightyX
 
Re: Dummer Fehler meinerseits

Original geschrieben von nightyX
Hallo, ich habs jetzt herausgefunden.

habe ja am Ende des Codes "... // Getter & Setter" geschrieben.
Ja und die hatte ich dann auch bei mir und zwar getX(), getY() usw. Tja hätte mir ja auch auffallen können, daß die schon weiter oben angesiedelt sind und ich die dadaurch überschreibe.

Mein Fehler... jetzt klappts

Danke nochmal für die Mühe

nightyX

Argh, ich Depp, hätte mir auch auffallen müssen.
Zumal ich @home keine getter und setter drin habe, @work aber schon...
@home:
Code:
public class JTestButton extends JButton
{
	private int x;
	private int y;

	public JTestButton(int x, int y)
	{
		super("hallo test" + x + y);
		this.x = x;
		this.y = y;
	}

	// Setter & Getter
}

Damit gibt es natürlich keine Konfrontationen mit Variablen und Methoden der Oberklassen...

Aber wo wir schon einmal dabei sind... manche Code-Konvention vermeidet "dumme" Fehler.

Tip 1: Instanzvariablen mit m_ beginnen, folgend der Typ und dann einen bezeichnenden Namen wählen.
Z.B.:
int m_iXPosition;
float m_fWidth;
double m_dHeight;
JPanel m_cMyPanel; (c für Class) etc.

Manche benutzen m_n für alles, was int, double, float und long ist, Geschmacksache.

Tip 2: Unnötige Sichtbarkeit vermeiden, lieber zuerst private Deklarationen verwenden -> vermeidet Überschreiben von protected und public Methoden der Oberklassen.

Tip 3: (Aus Erfahrung) Oftmals ist es "unwichtiger Code", welcher Fehler verursacht aber bei der Fehlersuche / -beschreibung weggelassen wird, s.o. ;-)
 
Noch was

Kollege schrieb mir gerade:

"Eclipse 3.0 M9 neu: The new Override Indicator annotation (see Workbench > Editors > Annotations preference page) flags a method that implements or overrides another one."

Also damit wird man in Zukunft vor ungewolltem und unbeabsichtigtem Überschreiben gewarnt. Nettes feature.
 
Zurück