Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at calc.Taschenrechner.myComponents(Taschenrechner.java:34)
at calc.Taschenrechner.<init>(Taschenrechner.java:20)
at calc.Main.main(Main.java:6)
Ich wollte einen Taschenrechner bauen und kriege diese Exception sobald ich versuche das Programm auszuführen. Was habe ich falsch gemacht? Hier ist mein Code.
package calc;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
public class Taschenrechner extends Frame {
private Label label, label2;
private TextField field, field2;
private Button button, button2, button3, button4;
private Panel panel, panel2, panel3, panel4;
Taschenrechner(){
myLayout();
myComponents();
}
void myLayout() {
setLayout(new GridLayout(4,1));
panel = new Panel(new FlowLayout());
panel2 = new Panel(new GridLayout(2, 1, 10, 10));
panel3 = new Panel(new GridLayout(1, 4, 10, 10));
panel4 = new Panel(new FlowLayout());
setVisible(true);
}
void myComponents() {
panel.add(label);
label.setText("Taschenrechner");
panel2.add(field);
field.setText("Zahl eingeben");
field.setColumns(20);
panel2.add(field2);
field2.setText("Zahl eingeben");
field2.setColumns(20);
panel3.add(button);
panel3.add(button2);
panel3.add(button3);
panel3.add(button4);
button.setLabel("+");
button.setLabel("-");
button.setLabel("*");
button.setLabel("/");
panel4.add(label2);
label2.setText("Test");
}
}
package calc;
public class Main {
public static void main(String[] args) {
new Taschenrechner();
}
}
Danke
kleiner Vorschlag wäre zu sagen
add(label = new JLabel());
Klammerfehler
panel2.add(field2 = new TextField("Zahl eingeben"),20);
öh habt ihr anderne code als ich ?
bei dem code wird keine variable initialisiert, ergo alle null und null kann man nirgends hinzufügen.
desweiteren würde ich das setVisible immer als letztes aufrufen, nachdem alle components hinzugefügt werden, sonst sind die mögl. nicht sichtbar…
ja das haben wir gestern im Chat noch alles geklärt
package calc;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import com.sun.java.swing.plaf.windows.WindowsIconFactory;
public class Taschenrechner extends Frame {
private Label label, label2;
private TextField field, field2;
private Button button, button2, button3, button4;
private Panel panel, panel2, panel3, panel4;
Taschenrechner(){
setLayout(new GridLayout(4,1));
setSize(200,200);
add(panel = new Panel(new FlowLayout()));
add(panel2 = new Panel(new GridLayout(2, 1, 10, 10)));
add(panel3 = new Panel(new GridLayout(1, 4)));
add(panel4 = new Panel(new FlowLayout()));
panel.add(label = new Label("Taschenrechner"));
panel2.add(field = new TextField("Zahl eingeben",20));
panel2.add(field2 = new TextField("Zahl eingeben",20));
panel3.add(button = new Button("+"));
panel3.add(button2 = new Button("-"));
panel3.add(button3 = new Button("*"));
panel3.add(button4 = new Button("/"));
panel4.add(label2 = new Label("Test"));
addWindowListener(new closeWindow());
setVisible(true);
}
class myListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
}
}
class closeWindow extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
}
Jap, im Moment sieht mein Code so aus. Warum sind meine Buttons so riesig?
wegen dem [JAPI]GridLayout[/JAPI], nimm mal lieber [JAPI]FlowLayout[/JAPI]
Danke geht.
Ich möchte die Länge und Breite meiner TextFelder festsetzen, so dass wenn ich mein Frame ziehe die sich nicht in der Größe ändern. Mit field.setSize(…,…); funktioniert das nicht. Wird es schwer das zu machen? Ich will dass alle meine Komponente feste Größe haben und sich nicht verändern.
setPrefferedSize musst du nehmen
Hmm das erwartet Dimension. So wie ich aus der API verstehe, besteht Dimestion aus höhe und breite, nur funktioniert das so nicht:
field.setPreferredSize(20,20);
Wie muss man das richtig schreiben?
na du hast es doch schon gesagt, es erwartet ein Dimension
also was macht man da new Dimension(200,200)
Achso, das ist ja ne Klasse. Ich dachte dort stehen nur Datentypen :D. Aber funktioniert nicht lol ::crazy
Ich habe das so gemacht:
panel2.add(field = new TextField("Zahl eingeben",20));
field.setPreferredSize(new Dimension(20, 20));
..```
definier mal funktioniert nicht
Wenn ich meinen Taschenrechner mit der Maus vergrößere, also das Fenster, dann werden alle Komponente, auch dieser Textfeld länger und größer.
ja das liegt an dem Layout was du benutzt, deshalb meinte ich mal lies dir in der Insel mal das Kapitel über die Layouts durch
Das hier oder? link
Werde mir gleich mal anschauen, danke. Falls ich nicht weiter komme, dann melde ich mich wieder :D.
Hmm GridBagLayout scheint der richtige für mich zu sein. Aber ich werde lieber weiter mit Java weiter machen und meine Zeit jetzt damit nicht verschwenden. Kann ja wenn ich es irgendwann mal brauche, das schnell mit NetBeans machen .
bygones
27. August 2006 um 00:30
20
das Gridbaglayout ist das komplexeste und komplizierteste Layout - das richtig zu verstehen ist hart…
was aber nicht heißt, dass man es versuchen soll - wenn man es anwenden kann ist es mächtig wie kein anderes.
Nur so als Vorwarnung und Motivatio