G
Guest
Gast
Ich habe ein JPanel mit einem Label und einem Textfield darauf. Das Layout ist über den Konstruktor veränderbar (zB ändern der Größe des Textfields).
Nun möchte ich Panels mit abweichendem Layout erzeugen (größeres Textfield usw). Ich dachte mir, ich erstelle eine neue Klasse, erbe von der Oberklasse und ändere im Konstruktor das Layout.
Ich erhalte eine Nullpointerexeption:
Ich nehme an er findet das JLabel nicht. Was mache ich falsch?
Code:
package core;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class LTextField extends JPanel{
private JLabel jlabel = null;
private JTextField jtext = null;
public LTextField(){
}
public LTextField(String label, int dim, boolean left){
jlabel = new JLabel(label);
jtext = new JTextField(dim);
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
setAlignment(true);
setBorderDimension(10,10,10,10);
setRigidAreaDimension(new Dimension(10,0), left);
setLabelFieldDimension(new Dimension(100,20));
setTextFieldDimension(new Dimension(100,20));
}
public void setLabelFieldDimension(Dimension dim){
jlabel.setPreferredSize(dim);
jlabel.setMinimumSize(dim);
jlabel.setMaximumSize(dim);
}
public void setTextFieldDimension(Dimension dim){
jtext.setPreferredSize(dim);
jtext.setMinimumSize(dim);
jtext.setMaximumSize(dim);
}
public void setBorderDimension(
int top,
int left,
int bottom,
int right){
setBorder(BorderFactory.createEmptyBorder(
top,
left,
bottom,
right
));
}
public void setRigidAreaDimension(Dimension dim, boolean left){
if(left){
add(Box.createHorizontalGlue());
add(jlabel);
add(Box.createRigidArea(dim));
add(jtext);
}
else{
add(jlabel);
add(Box.createRigidArea(dim));
add(jtext);
add(Box.createHorizontalGlue());
}
}
public void setAlignment(boolean left){
if(left){
jlabel.setAlignmentX(LEFT_ALIGNMENT);
jtext.setAlignmentX(LEFT_ALIGNMENT);
setAlignmentX(LEFT_ALIGNMENT);
}else{
jlabel.setAlignmentX(RIGHT_ALIGNMENT);
jtext.setAlignmentX(RIGHT_ALIGNMENT);
setAlignmentX(RIGHT_ALIGNMENT);
}
}
}
Nun möchte ich Panels mit abweichendem Layout erzeugen (größeres Textfield usw). Ich dachte mir, ich erstelle eine neue Klasse, erbe von der Oberklasse und ändere im Konstruktor das Layout.
Code:
package core;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import core.LTextField;
public class LTextFieldBig extends LTextField{
private JLabel jlabel = null;
private JTextField jtext = null;
public LTextFieldBig(String label, int dim, boolean left){
jlabel = new JLabel(label);
jtext = new JTextField(dim);
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
setAlignment(true);
setBorderDimension(10,10,10,10);
setRigidAreaDimension(new Dimension(10,0), left);
setLabelFieldDimension(new Dimension(100,20));
setTextFieldDimension(new Dimension(80,50));
}
}
Ich erhalte eine Nullpointerexeption:
Exception in thread "main" java.lang.NullPointerException
at core.LTextField.setAlignment(LTextField.java:77)
at core.LTextFieldBig.<init>(LTextFieldBig.java:26)
Ich nehme an er findet das JLabel nicht. Was mache ich falsch?