guten Morgen liebe Informatiker-Brüder

Status
Nicht offen für weitere Antworten.
Z

z33di

Gast
oder auch Java Spezialisten ;)

ich komm nicht weiter:

Code:
	JButton BtnZiffern[] = new JButton[10];
				
				
					BtnZiffern[1].setBounds(30, 310, 45, 45);
					BtnZiffern[1].setName(String.valueOf(1));
					BtnZiffern[1].setLabel(String.valueOf(1));
					BtnZiffern[1].setFont(new Font("Judas", Font.ITALIC, 27));
					Fenster.add(BtnZiffern[1]);

diesen code bzw diesen code in einer schleife die jeden button ins fenster setzen soll funktioniert einfach nicht ich weis das Name und Label 1 zuviel is aber das ist scheißewurschtegal ich bekomm eine Pointer exception bzw:

Exception in thread "main" java.lang.NullPointerException
at zweiterversuch.Netzwerkeinstellungen.Fenster(Netzwerkeinstellungen.java:97)
at zweiterversuch.Netzwerkeinstellungen.main(Netzwerkeinstellungen.java:10)


naja wenn mir einer helfen kann rettet er meinen vormittag MERCI
 
S

SlaterB

Gast
ein Object-Array enthält keine Objekte, sondern nur null,
soll Java da selbstständig Objekte erzeugen und reinschreiben?
was wenn es keinen Default-Konstuktor gibt, muss Java sich dann auch noch Parameter ausdenken?

was kann man bloß machen, wenn es ein Interface-Array wie
Comparable[] a = new Comparable[10]
ist, irgendwelche Objekte nehmen die das Interface implementieren?

so, darüber mal nachdenken und für den Rest des Lebens erinnern ;)

und die JButtons noch erzeugen
BtnZiffern[1] = new JButton();
 

schalentier

Gesperrter Benutzer
Mit
Code:
JButton BtnZiffern[] = new JButton[10];
wird nur ein Array erstellt, in den du 10 JButtons haengen kannst.

Aber du musst die eigentlichen JButton-Instanzen noch erzeugen, also:
Code:
BtnZiffern[1] = new JButton();
BtnZiffern[1].setBounds(30, 310, 45, 45);
BtnZiffern[1].setName(String.valueOf(1));
BtnZiffern[1].setLabel(String.valueOf(1));
BtnZiffern[1].setFont(new Font("Judas", Font.ITALIC, 27));
Fenster.add(BtnZiffern[1]);

mfg
 

Niki

Top Contributor
Wenn du ein Array erstellst sind zunächst einmal alle Felder null, das heißt das muss in etwa so aussehen:
Code:
JButton[] jbArr = new JButton[10];

for(int i = 0; i < jbArr.length; i++){
  JButton jb = new JButton();
  jb.setText("Button " + i);
  //weitere setter...
  jbArr[i] = jb;
}
 
Z

z33di

Gast
...du bist schon ne fiese sau ;) ich bin noch relativ blutiger anfänger muss ich dazu sagen jez hab ich aus deiner antwort eigendlich nur rauslesen können dass ich zwar speicherplatz für die buttons reserviert hab aber sie leider noch nicht erzeugt hab (ich dachte das wäre an der stelle "new" passiert) muss ich jez jeden einzeln bzw in ner schleife noch sagen "jbutton BtnZiffern[X] = new Jbutton "bla";" oder hab ichs komplett falsch verstanden wenn das der fall is versuchs bitte zu erklären ohne einen einzigen fachbegriff dann kann ichs mir auch für den rest meines lebens merken ;)
 
Z

z33di

Gast
...war auf antwort 1 gerichted.

ich danke viel mals für die hilfe einen schönen tag noch.
 

Niki

Top Contributor
Genau, beim Erzeugen vom Array wird ein Objekt mit n Feldern angelegt. Jedes dieser Felder ist am Anfang mit "null" initialisiert. Willst du dass diese Felder auf irgendwelche Objekte zeigen, musst dies explizit mit array[index] = objekt tun.
 
Z

z33di

Gast
ich habs jez so gemacht:

Code:
JButton BtnZiffern[] = new JButton[10];
				
				for (int i = 1; i<10; i++)
				{
					BtnZiffern[i] = new JButton();
					switch (i) 
					{
					case 1: BtnZiffern[i].setBounds(30, 310, 45, 45);
					case 2: BtnZiffern[i].setBounds(80, 310, 45, 45);
					case 3: BtnZiffern[i].setBounds(130, 310, 45, 45);
					case 4: BtnZiffern[i].setBounds(30, 360, 45, 45);
					case 5: BtnZiffern[i].setBounds(80, 360, 45, 45);
					case 6: BtnZiffern[i].setBounds(130, 360, 45, 45);
					case 7: BtnZiffern[i].setBounds(30, 410, 45, 45);
					case 8: BtnZiffern[i].setBounds(80, 410, 45, 45);
					case 9: BtnZiffern[i].setBounds(130, 410, 45, 45);
					case 0: BtnZiffern[i].setBounds(80, 460, 45, 45);
					}
					BtnZiffern[i].setName(String.valueOf(i));
					BtnZiffern[i].setLabel(String.valueOf(i));
					BtnZiffern[i].setFont(new Font("Judas", Font.ITALIC, 27));
					Fenster.add(BtnZiffern[i]);
					//BtnZiffern[i].setVisible(true); bringt nix
					
				}

und der einzige button der kommt is der der 0 darstellen soll & der hat als label "..." ziemlich komisch kein fehler gar nix geht eifach nicht
 
S

SlaterB

Gast
und wenn du ohne Array einfach nur mal so zwei Buttons einfügst,
dann wird doch sicherlich der gleiche Fehler kommen?

denn ich denke es liegt am Layout,
schreibe alle Buttons in ein JPanel und adde das JPanel in dein Fenster

edit: da du setBounds verwendest: Layout auf null setzen im Fenster ohne JPanel

edit:
for (int i = 1; i<10; i++)

wieso dann "case 0:"?
 
Z

z33di

Gast
weil ich mit dem layout einfach nicht klar gekommen bin hab ich einfach (null) rein geschrieben habe aber auch 6 andere buttons da drin die wunderbar funktionieren mir is es echt am liebsten x & y koordinate anzugeben... wenn ichs umgehen kann würd ich gern des panel teil weglassen weil des machts irgendwie unverständlich und unötig kompliziert find ich
 
Z

z33di

Gast
"edit:
for (int i = 1; i<10; i++)

wieso dann "case 0:"?" ...ja ok war dumm aber is ja nich ausschlaggebend oder?
 
S

SlaterB

Gast
wäre auch nur eine Nebenbemerkung, stört ja nicht,

aber zufälligerweise doch ausschlaggebend:
cases werden immer weitergereicht wenn du dahinter kein Break setzt,
alle Buttons erhalten die Bounds passend zu i, aber auch alle cases dahiner,
am Ende also immer BtnZiffern.setBounds(80, 460, 45, 45);
-> übereinander

> der hat als label "..."

deine Buttons sind zu kurz, um eine Zahl darstellen zu können,
mach sie breiter oder du musst noch tricksen (Insets neu setzen)
 
Z

Z33di

Gast
jo schrift verkleinertl, hinter jedem case ein break und alles ist wunderbärchen thx
 

Marco13

Top Contributor
Wenn man in einer Schleife von 1 bis 10 läuft, und die "Haupt-Aktion" in der Schleife ist die Abfrage, ob man gerade bei 1,2,3... oder 10 ist, kann man das schon in Frage stellen. (Tipp: Kein null-Layout verwenden...)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben