Hi Leute,
ich versuche im Moment eine GUI für eine Art Kalenderapplikation zu schreiben, da es sich dabei um eine Aufgabe für mein Studium handelt, wäre es sinnlos etwas vorgefertigstes komplett zu verwenden.
Also mein Problem ist, ich habe ein JLabel, dem ein JPopupMenu hinzugefügt wird.In dem Menu befiden sich einige JCheckBoxMenuItems.
Das Menu wird über ein Mousegesteuertes Event aufgerufen.
Durch einen Actionlistener versuche ich nun erstmal die Farben des Labels zu ändern, was aber leider nicht funktioniert, da im Actionlistener die getParent Methode eine NullPointerexception wirft.
hier der Code
Es handelt sich bei der klasse nur um eine testklasse.
kann mir da wer helfen?
*Edit* Achso und ich verwende deshalb CheckboxMenuItem, weil ich in der lage sein muss mehrer Sachen auswählen zu können. die Farben sind nur beispiele, sind später dann Strings ^^
gez bcpain
ich versuche im Moment eine GUI für eine Art Kalenderapplikation zu schreiben, da es sich dabei um eine Aufgabe für mein Studium handelt, wäre es sinnlos etwas vorgefertigstes komplett zu verwenden.
Also mein Problem ist, ich habe ein JLabel, dem ein JPopupMenu hinzugefügt wird.In dem Menu befiden sich einige JCheckBoxMenuItems.
Das Menu wird über ein Mousegesteuertes Event aufgerufen.
Durch einen Actionlistener versuche ich nun erstmal die Farben des Labels zu ändern, was aber leider nicht funktioniert, da im Actionlistener die getParent Methode eine NullPointerexception wirft.
hier der Code
Java:
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JPopupMenu;
public class groupLabel extends JLabel{
public groupLabel(){
Popup popup = new Popup(listener);
popupmouseadapter pm = new popupmouseadapter(popup, this);
this.setText("Leer");
// this.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
// this.setOpaque(true);
this.add(popup);
System.out.println("blablabla" + popup.getParent());
this.addMouseListener(pm);
}
public static class Popup extends JPopupMenu {
public Popup (ActionListener listener) {
final String entries[] = {"black" , "Blue","cyan","darkGray","gray",
"green", "LightGray", "magenta", "orange","pink",
"red", "white", "yellow", "Quit"};
for (int i = 0; i < entries.length; i++ ) {
JCheckBoxMenuItem mi = new JCheckBoxMenuItem(entries[i]);
mi.addActionListener(listener);
this.add(mi);
//System.out.println("klasse popup: " + this.getParent());
}
}
}
public static class popupmouseadapter extends MouseAdapter {
public Popup popup;
public groupLabel pl;
popupmouseadapter (Popup p1, groupLabel p2) {
super();
popup = p1;
pl = p2;
}
public void mousePressed(MouseEvent me) {
int key = me.getModifiers();
if (key == me.META_MASK) {
popup.show(pl,me.getX(),me.getY());
System.out.println("klasse popup: " + popup.getParent());
}
}
}
public static ActionListener listener = new ActionListener (){
public void actionPerformed (ActionEvent e) {
String s = e.getActionCommand();
if ("Quit".equals(s)) System.exit(0);
JCheckBoxMenuItem mi = (JCheckBoxMenuItem)e.getSource();
JPopupMenu m = (JPopupMenu)mi.getParent();
groupLabel l = (groupLabel)m.getParent();
System.out.println(mi);
System.out.println(m);
System.out.println(m.getParent());
System.out.println(l);
if ("black".equals(s)) l.setBackground(Color.black);
else if ("Blue".equals(s)) l.setBackground(Color.BLUE);
else if ("cyan".equals(s)) l.setBackground(Color.cyan);
else if ("darkGray".equals(s)) l.setBackground(Color.darkGray);
else if ("gray".equals(s)) l.setBackground(Color.gray);
else if ("green".equals(s)) l.setBackground(Color.green);
else if ("LightGray".equals(s)) l.setBackground(Color.lightGray);
else if ("magenta".equals(s)) l.setBackground(Color.magenta);
else if ("orange".equals(s)) l.setBackground(Color.orange);
else if ("pink".equals(s)) l.setBackground(Color.pink);
else if ("red".equals(s)) l.setBackground(Color.red);
else if ("white".equals(s)) l.setBackground(Color.white);
else if ("yellow".equals(s)) l.setBackground(Color.yellow);
}
};
public static void main(String[] args) {
Frame f = new Frame();
groupLabel ch = new groupLabel();
f.add(ch);
f.pack();
f.setVisible(true);
}
Es handelt sich bei der klasse nur um eine testklasse.
kann mir da wer helfen?
*Edit* Achso und ich verwende deshalb CheckboxMenuItem, weil ich in der lage sein muss mehrer Sachen auswählen zu können. die Farben sind nur beispiele, sind später dann Strings ^^
gez bcpain