# Checkboxstatus abfragen



## Hagb (12. Jul 2011)

Also, ich habe jetzt seit Stunden immer wieder dasselbe versucht, finde den Fehler aber nicht. Hier mal ein Ausschitt meines Quellcode (der alleinstehend eigentlich auch funktionieren sollte, aber eben leider nicht ganz):


```
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Checkbox extends Applet implements ItemListener
	 	{
			JFrame frame = new JFrame();
			JSlider value;
			JCheckBox k1,k2;
			boolean K1=true, K2=true;

	 		
	 		public void init()
	 		{   
	 			frame.setTitle("Einstellungen");
	 			frame.setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE );	
	 			frame.setLayout(new BorderLayout());
	 			frame.setVisible( true );
	 			frame.setAlwaysOnTop(true);
	 			JPanel panel = new JPanel();
	 			frame.add( panel, BorderLayout.NORTH );
	 			frame.pack();
	 			frame.setBounds(1100, 300, 150, 380);
	 		
	 		        
	 	        JCheckBox k1 = new JCheckBox("Hello" , true );
	 	        JCheckBox k2 = new JCheckBox("Hello2", true );
	 	        panel.setLayout(new GridLayout(2,1));
	 	        panel.add(k1);
	 	        panel.add(k2);

	 	        
	 	        k1.addItemListener (this);
	 	        k2.addItemListener (this);

	 		}
	 		public void paint(Graphics gr)
	 		{
	 		if (K1) gr.drawString("Hello",30, 30);
	 		if (K2) gr.drawString("Hello2",30, 60);
	 		}
	 		
			public void itemStateChanged(ItemEvent e)
	 		{
	 			if (k1.isSelected()) K1=true; else K1=false;
	 			if (k2.isSelected()) K2=true; else K2=false;
                                repaint();

	 		}
		}
```

Es geht um folgendes Problem:Wenn ich nun eine Checkbox ankreuze sollte das Hello bzw. das Hello2 verschwinden bzw. auftauchen, leider bleibt es immer sichtbar. Was mache ich falsch, ich verzweifle langsam...
Ich bedanke mich für jede Hilfe


----------



## Marco13 (12. Jul 2011)

Am Anfang von paint sowas wie

g.setColor(Color:WHITE);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(Color.BLACK);

um den Hintergrund zu löschen.
BTW:

```
if (k1.isSelected()) K1=true; else K1=false;
```
->

```
K1=k1.isSelected();
```


----------



## Ariol (12. Jul 2011)

```
public void paint(Graphics gr)
{
    gr.setColor(Color.WHITE);
    gr.fillRect(0,0,getWidth(),getHeight());
    gr.setColor(Color.BLACK);
    if (K1) gr.drawString("Hello",30, 30);
    if (K2) gr.drawString("Hello2",30, 60);
}
```



EDIT: Java-Tags


----------



## Hagb (12. Jul 2011)

Danke für die schnellen antworten 

also ich habs mal nach euren vorschlägen geändert, 
K1=k1.isSelected(); ist natürlich eine wunderbare Idee 

aber es will trotzdem nicht ganz funktionieren. also wenn das applet gestartet wird ist alles prima, wenn man aber das häckchen wegnimmt bleiben die "Hellos", die sollten aber verschwinden...


----------



## Ariol (12. Jul 2011)

Mach mal noch ein repaint, dort wo die checkboxen gelesen werden.


----------



## Hagb (12. Jul 2011)

Der Quellcode nochmal ....


```
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class Checkbox extends Applet implements ItemListener
        {
            JFrame frame = new JFrame();
            JSlider value;
            JCheckBox k1,k2;
            boolean K1=true, K2=true;
 
            
            public void init()
            {   
                frame.setTitle("Einstellungen");
                frame.setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE );   
                frame.setLayout(new BorderLayout());
                frame.setVisible( true );
                frame.setAlwaysOnTop(true);
                JPanel panel = new JPanel();
                frame.add( panel, BorderLayout.NORTH );
                frame.pack();
                frame.setBounds(1100, 300, 150, 380);
            
                    
                JCheckBox k1 = new JCheckBox("Hello" , true );
                JCheckBox k2 = new JCheckBox("Hello2", true );
                panel.setLayout(new GridLayout(2,1));
                panel.add(k1);
                panel.add(k2);
 
                
                k1.addItemListener (this);
                k2.addItemListener (this);
 
            }
           
            	public void paint(Graphics gr)
            	{
            		gr.setColor(Color.WHITE);
            		gr.fillRect(0,0,getWidth(),getHeight());
            		gr.setColor(Color.BLACK);
            	    if (K1) gr.drawString("Hello",30, 30);
            	    if (K2) gr.drawString("Hello2",30, 60);

            }
            
            public void itemStateChanged(ItemEvent e)
            {
                K1=k1.isSelected();
                K2=k2.isSelected();
                repaint();
 
            }
        }
```


----------



## Marco13 (12. Jul 2011)

*nochmal drüberschaut* Moment mal :shock: das ist ja komplett falsch  Dort wird ein JFrame erstellt. Soll das ein Applet werden, oder eine Anwendung? (Eine Anwendung hat einen JFrame, ein Applet hat meistens keinen, und man sollte nicht AWT und Swing mischen...)


----------



## Hagb (12. Jul 2011)

Das Programm ist noch um einiges grösser, es ist nur ein Ausschnitt. Der Haupteil des Programms ist im Applet, man sollte jedoch eine Beschriftung ab- oder anwählen können. Der Frameteil dient nur zu diesem Zweck. Ich habe auch einen JSlider ins Frame eingebaut und der wirkt sich ganz normal auf das Applet aus. Da dachte ich mit der Checkbox würde es auch gehen.

Ich habe auch schon oft gelesen .swing* und .awt* sollen nicht kombiniert wedren, bei mir hats bis jetzt einfach funktioniert, da hoffte ich, dass die Checkboxen auch gehen würden.


----------



## SlaterB (12. Jul 2011)

im Konstruktor werden lokale Variablen angelegt die genau die die Instanzattribute heißen, letztere bleiben null,
beim Zugriff in anderen Methoden dann NullPointerExceptions, 
in Applets vielleicht noch weniger zu erkennen als in Konsolen zu normalen GUI-Programmen, eher damit anfangen,
nur einigemaßen funktionierende Sachen übertragen


----------



## Gast2 (12. Jul 2011)

Nur weil du mit ner Eisenbahn auch auf nen paar Straßen fahren könntest solltest du doch lieber dein auto dafür hernehmen 
Es hat schon seine Gründe warum man Swing und AWT nicht mischen sollte, da kommen oft unschöne (vermeindlich unerklärbare) sachen bei rum.

Zu deinem Code:
Deine checkboxen K1 und k2 sind null.


----------



## Hagb (12. Jul 2011)

DANKE LEUTE
Ihr seid GENIES

So geht es  



```
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class Checkbox extends Applet implements ItemListener
        {
            JFrame frame = new JFrame();
            JSlider value;
          
            boolean K1=true, K2=true;
            JCheckBox k1 = new JCheckBox("Hello" , true );
            JCheckBox k2 = new JCheckBox("Hello2", true );
 
            
            public void init()
            {   
                frame.setTitle("Einstellungen");
                frame.setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE );   
                frame.setLayout(new BorderLayout());
                frame.setVisible( true );
                frame.setAlwaysOnTop(true);
                JPanel panel = new JPanel();
                frame.add( panel, BorderLayout.NORTH );
                frame.pack();
                frame.setBounds(1100, 300, 150, 380);
            
                    
                
                panel.setLayout(new GridLayout(2,1));
                panel.add(k1);
                panel.add(k2);
        
 
                
                k1.addItemListener (this);
                k2.addItemListener (this);
                repaint();
 
            }
           
            	public void paint(Graphics gr)
            	{
            		gr.setColor(Color.WHITE);
            		gr.fillRect(0,0,getWidth(),getHeight());
            		gr.setColor(Color.BLACK);
            	    if (K1) gr.drawString("Hello",30, 30);
            	    if (K2) gr.drawString("Hello2",30, 60);

            }
            
            public void itemStateChanged(ItemEvent e)
            {
                K1=k1.isSelected();
                K2=k2.isSelected();
                repaint();
 
            }
        }
```


----------

