Ich möchte die Schriftgröße mittel radiobuttons verändern, ich bekomme aber ständig eine Nullpointer-meldung, wie können diese buttons korrekt angesprochen werden?
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class KomponentenPanel extends JPanel implements ItemListener{
private Label label1, label2;
private int schriftgroesse, mode;
private String schriftart = "Serif";
private JButton button1;
private JTextField textfeld;
private ButtonGroup radiobuttonGruppe;
private JComboBox fontCombo;
private Dimension d = new Dimension(300,30);
private JRadioButton[] rb;
private String[] rbNamen = {"small", "medium", "large"};
private int[] fontgr = {12, 14, 18};
public KomponentenPanel(){
// LayoutManager festlegen
FlowLayout fl = new FlowLayout();
setLayout(fl);
fl.setAlignment(1);
// Label setzen
label1 = new Label ("Geben Sie einen Titel ein.");
label1.setFont(new Font("Monospaced", Font.BOLD, 12));
label1.setAlignment(0);
add(label1, fl);
// Textfeld setzen
textfeld = new JTextField("Textfeld", 30);
add(textfeld, fl);
//Buttons setzen
button1 = new JButton("EINGEBEN");
button1.setPreferredSize(d);
add(button1);
button1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
label2.setFont(new Font(schriftart, mode, schriftgroesse));
label2.setText(textfeld.getText());
}
});
// Label2 um den Titel zu formatieren
label2 = new Label ("");
label2.setPreferredSize(d);
label2.setForeground(Color.white);
label2.setBackground(Color.black);
label2.setFont(new Font(schriftart, Font.BOLD, 12));
label2.setAlignment(1);
add(label2, fl);
// Radio-Buttons als Gruppe auf ein neues Panel setzen
JPanel radioButtonPanel = new JPanel();
radiobuttonGruppe = new ButtonGroup(); // neue Radiobuttongruppe
for (int i=0; i< rbNamen.length; i++){ // Buttons in diese Gruppe einfügen
rb = new JRadioButton[rbNamen.length];
rb[i]= new JRadioButton(rbNamen[i]);
radioButtonPanel.add(rb[i]); // dem RadiobuttonPanel hinzufügen
radiobuttonGruppe.add(rb[i]); // der Buttongruppe hinzufügen
rb[i].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if (rb[0].isSelected()== true){
schriftgroesse = 12;
label2.setFont(new Font(schriftart, mode, schriftgroesse));
}
else if (rb[1].isSelected() == true){
schriftgroesse = 14;
label2.setFont(new Font(schriftart, mode, schriftgroesse));
}
else if (rb[2].isSelected() == true){
schriftgroesse = 18;
label2.setFont(new Font(schriftart, mode, schriftgroesse));
}
System.out.println(schriftgroesse);
}
});
}
add(radioButtonPanel); // dem KomponentenPanel hinzufügen
// Combobox (ähnlich der Auswahlbox Choice)
fontCombo = new JComboBox();
fontCombo.setEditable(true);
fontCombo.addItem("Serif");
fontCombo.addItem("SansSerif");
fontCombo.addItem("Monospaced");
add(fontCombo);
fontCombo.addItemListener(this);
}
public void itemStateChanged(ItemEvent ie){
schriftart = (String) fontCombo.getSelectedItem();
label2.setFont(new Font(schriftart, mode, schriftgroesse));
System.out.println(schriftart);
}
// Version2 eingebettete Klasse, die den MouseMotionListener implementiert
class MeinAL implements ActionListener{
public void actionPerformed(ActionEvent e){
Object source = e.getSource();
System.out.println(source.toString());
if (rb[0].isSelected()== true){
schriftgroesse = 12;
label2.setFont(new Font(schriftart, mode, schriftgroesse));
}
else if (source == rb[1]){
schriftgroesse = 14;
label2.setFont(new Font(schriftart, mode, schriftgroesse));
}
else if (source == rb[2]){
schriftgroesse = 18;
label2.setFont(new Font(schriftart, mode, schriftgroesse));
}
System.out.println(schriftgroesse);
}
}
}