JCheckbox und JButton

mavy1

Grünschnabel
Hi leute,
es geht um folgendes ich habe mir soweit ein kleines programm geschrieben das mir Buttons erstellt mit einer pfad angabe zu einem File das man sich selber aussuchen kann und das ganze in einer config datei abspeichert und neber den Buttons habe ich mir jetzt noch ein JCheckbox für jedes button erstellen das links neber dem button erscheint. so jetzt kommt mein problem. wie kann ich in der actionPreformed abfragen wenn die checkbox für den button ausgwählt wurde und dann auf den Button "Drucken" drücke das er mir das druckt. weil normaler weiße fange ich die checkbox events ja in der itemStateChanged methode ab. aber da kann ich doch net auf das button ereigniss warten. ich will mal hoffen das mir da einer helfen kann
VIELEN DANK schon einmal. hier ist mein Code :
Code:
public class BerichtAusdruck extends JFrame implements ActionListener, ItemListener{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	ArrayList<String> pfadArray; //Speichern des Pfades
	ArrayList<String> buttonArray; //Speichern der Buttonname
	ArrayList<String> check; //Speichern der Checkbox Auswahl
	
	//Definition der JPanelvariablen
	JPanel mleiste;
	JPanel schaltfMitte;
	JPanel schaltfUnten;
	
	//Definition der Buttonsvariablen
	JButton beenden;
	JButton drucken;
	JButton button;
	JButton loeschen;
	
	//Definition der Menüvariablen
	JMenuBar bar;
	JMenu datei;
	JMenuItem neu;
	JMenuItem oeffnen;
	
	//Definition der Checkbox
	JCheckBox checkbox;
	

	public BerichtAusdruck(){
		super("Programm um Formulare zu Öffnen und Neue zuerstellen");
		pfadArray=new ArrayList<String>();
		buttonArray=new ArrayList<String>();
		try {
			//aus Datei lesen
			BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream( "config.ini" )));
			String zeile=in.readLine();
			int i=1;
			while(zeile!=null){
				if(i%2==0){
					String dateipfad=zeile;
					pfadArray.add(dateipfad);
				}else{
					String buttonname=zeile;
					buttonArray.add(buttonname);
				}
				i++;
				zeile=in.readLine();	
			}	
			in.close();
		}catch (Exception e1) {e1.printStackTrace();}
		
		//Erzeugen der JPanels
		mleiste=new JPanel();
		schaltfMitte=new JPanel();
		schaltfUnten=new JPanel();
		
		//Layout
		GridLayout layoutMitte=new GridLayout(buttonArray.size(),0);
		GridLayout layoutUnten=new GridLayout(2,1);
		BorderLayout bl=new BorderLayout();
		GridLayout barlayout=new GridLayout(1,0);
		
		mleiste.setLayout(barlayout);
		schaltfMitte.setLayout(layoutMitte);
		schaltfUnten.setLayout(layoutUnten);
		
		bl.addLayoutComponent(mleiste, BorderLayout.NORTH);
		bl.addLayoutComponent(schaltfMitte, BorderLayout.CENTER);
		bl.addLayoutComponent(schaltfUnten, BorderLayout.SOUTH);
		
		
		//Erzeugen der Buttons
		for(int j=0;j<buttonArray.size();j++){
			button = new JButton(buttonArray.get(j));
			button.addActionListener(this);
			schaltfMitte.add(button);
			checkbox=new JCheckBox(buttonArray.get(j));
			checkbox.addItemListener(this);
			schaltfMitte.add(checkbox);
			
		}

		loeschen=new JButton("Löschen");
		loeschen.addActionListener(this);
		schaltfUnten.add(loeschen);
		drucken=new JButton("Drucken");
		drucken.addActionListener(this);
		schaltfUnten.add(drucken);
		beenden=new JButton("Beenden");
		beenden.addActionListener(this);
		schaltfUnten.add(beenden);
		
		//Erzeugen des Menüs
		bar= new JMenuBar();
		datei=new JMenu("Datei");
		neu=new JMenuItem("Neu");
		oeffnen=new JMenuItem("Öffnen");
		neu.addActionListener(this);
		oeffnen.addActionListener(this);
		datei.add(neu);
		datei.add(oeffnen);
		bar.add(datei);
		
		
		//Addn des Menüs auf das JPanel
		mleiste.add(bar);
		
		//Addn des Layout auf das JFrame und JFrame sichtbar machen
		add(mleiste);
		add(schaltfMitte);
		add(schaltfUnten);
		setLayout(bl);
		pack();
		setVisible(true);
		setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
	}

	public static void main(String[] args) {
		new BerichtAusdruck();
	}

	public void actionPerformed(ActionEvent e) {
		
		if(e.getSource()==neu){
			new ButtonErstellen();
			this.dispose();
		}
		
		if(e.getSource()==beenden){
			System.exit(0);
		}
		
		if(e.getSource()==loeschen){
			BLoeschen loesch=new BLoeschen();
		}
		
		if(e.getSource()==drucken){
			boolean check=checkbox.isSelected();
			String checkName=checkbox.getLabel();
			System.out.println(check);
			System.out.println(checkName);
			Toolkit tk  = Toolkit.getDefaultToolkit(); 
			PrintJob pj = tk.getPrintJob(new JFrame(), checkName, null, null);
			
		}
									
		String button=e.getActionCommand(); //Welcher Button gedrückt wurde
		for(int j=0;j<buttonArray.size();j++){
			if(button==buttonArray.get(j)){ //wenn gedrückter button gleich button im array? ja
				try{
					File file=new File(pfadArray.get(j));
					Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL " + file);
				}catch(Exception fehler){}
			}	
		}
	}

	public void itemStateChanged(ItemEvent e) {
		/*Object comp=e.getSource();
		if(comp instanceof JCheckBox){
			JCheckBox cb = (JCheckBox) e.getItemSelectable(); 
			 System.out.println( cb.getLabel() + ": " + cb.isSelected() );
		}
		if(comp instanceof JButton){
			System.out.println("test");
		}
		*/
	}
 
Hallo,

ein Vorschlag von mir wäre, dass du dir eine den Status der CheckBox in einer boolean-variablen merkst. Dann kannst du über diese Variable erfahren, wenn du auf Drucken klickst, ob die Checkbox markiert ist oder nicht.

MFG

zEriX
 
Hi mavy,
ich würde die checkboxes in ein Array speichern und dann in der actionPerformed-Methode
mit einer for-Schelife das Array durchlaufen und prüfen:

Code:
boolean isSelected = false;
if(checkboxArray[i].getName().equals(button.name)) {
    isSelected = checkboxArray[i].isSelected();
}

und dann hast du den Zustand der Checkbox!

Gruß
BlackMagician
 
Zurück