Symbolleiste

Status
Nicht offen für weitere Antworten.

java_1985

Mitglied
Hallo,

wie kann ich in den Buttons der Symbolleiste und den Buttons von verschiede Panels die gleiche Funktionalität einprogramieren. Ich hab das mit dem gleichen Coding versuch klapt aber nicht. Beim Panel geht es aber bei der Symbolleiste kriege ich immer Exceptions.

hier mein coding :
Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JToolBar;


public class Symbolleiste extends JToolBar {
	
	JToolBar toolbar;
	JButton button1,button2,button3,button4,button5,button6;
	Artikell art;
	Kunde kunde;
	
	
	Symbolleiste (){
		
		
		compute();
		
	}
	void compute(){
		ImageIcon image1 = new ImageIcon("Open.png");
		ImageIcon image2 = new ImageIcon("Close.png");
		ImageIcon image3 = new ImageIcon("Save.png");
		ImageIcon image4 = new ImageIcon("Break.png");
		ImageIcon image5 = new ImageIcon("Break.png");
		
	    JToolBar toolbar = new JToolBar(); 
	    
	    button1 = new JButton();
	   button2 = new JButton();
	    button3 = new JButton();
	    button4 = new JButton();
	     button5 = new JButton();
	     button6 = new JButton();
	    button1.setToolTipText("Öffnen");
	    button1.setIcon(image1);
	    button2.setToolTipText("Beenden");
	    button2.setIcon(image2);
	    button3.setToolTipText("Speichern");
	    button3.setIcon(image3);
	    button4.setToolTipText("Abbrechen");
	    button4.setIcon(image4);
	   // button5.setToolTipText();
	    button5.setIcon(image5);
	     
	    
	    
		add(toolbar);
		
	    toolbar.add( button1);
	     toolbar.addSeparator();
	    toolbar.add( button2);
	    toolbar.addSeparator();
	    toolbar.add( button3);
	      toolbar.addSeparator();
	    toolbar.add( button4);
	    toolbar.addSeparator();
	    toolbar.add( button5);
	    toolbar.addSeparator();
	    toolbar.add( button6);
	    
	    //toolbar.add( button1);
	    
	  button2.addActionListener(new ActionListener (){

	
		public void actionPerformed(ActionEvent arg0) {
			
			System.exit(1);
		}
		  		  
	  });
	  
	  
	 button3.addActionListener(new ActionListener(){
	        
			@Override
			public void actionPerformed(ActionEvent event) {
				
				  Artikel [] ref = art.objekt(art.groesse());
			    
				Kundenauftrag kdnauftrag = new Kundenauftrag(kunde, ref,2);
				kdnauftrag.speichern();			
				
				//artikel [n]= new Artikel(artnr.getText(),bezeich.getText());
				
			}
			
		});
	 
	 button4.addActionListener(new ActionListener(){
	        
			@Override
			public void actionPerformed(ActionEvent event) {
				
				  kunde = new Kunde ();
				 
				 try {
					kunde.name.getActionListeners();
					
					FileWriter ref = new FileWriter("hallo.txt");
					ref.write(kunde.name.getText());
					ref.close();
					
					
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				 
				 
				 
				 
			}
			
		});

coding vom Panel
Java:
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.Calendar;
import java.util.GregorianCalendar;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;


public class Leinwand extends JPanel {
   
  
    
    JButton  speichern,oeffnen;  
    JLabel jgesamtnetto,jversand,jsteuer,jbrutto;
    JLabel gesamtnetto,versand,steuer,brutto;
    Artikell art;
    Artikel artik;
    Kunde kunde;
    
    
    int n ;
   JPanel panel1, panel2, panel3;
   
   
	Leinwand (){
	
		setLayout( null ); 
		
       	//Panels werden erzeugt
		
        kunde = new Kunde ();
	     art = new Artikell();
       // panel2= new JPanel();
	    panel3 = new JPanel();
	    	
	
	 //Buttons
	 
		speichern = new JButton("Speichern");
	    oeffnen = new JButton ("Öffnen");
	   
			 
	 //Bestimmung der Positionen auf dem verschiedenen Panels   
	    
	    kunde.setBounds(5,10,1270,300);
	//	panel2.setBounds(2,350,1270,300);
		panel3.setBounds(5,680, 1270, 200);
		art.setBounds(2,350,1270,300);
		
		// Pos. Buttons
		speichern.setBounds(50, 850, 100, 30);
		oeffnen.setBounds(150, 850, 100, 30);
		
		// Pos. Label
		
	  // Pos Textfelder
		
		
		//Einfügen auf den Panels
			
	 
		
	//	panel2.add(ref);
		add(kunde);
	    add(art);
	    add(panel3);
		
		add(speichern);
		add(oeffnen);
		
		
		
		
		compute();
	}
	
	public void compute(){
	speichern.addActionListener(new ActionListener(){
        
		@Override
		public void actionPerformed(ActionEvent arg0) {
			
			  Artikel [] ref = art.objekt(art.groesse());
		    
			Kundenauftrag kdnauftrag = new Kundenauftrag(kunde, ref,2);
			kdnauftrag.speichern();			
			
			//artikel [n]= new Artikel(artnr.getText(),bezeich.getText());
			
		}
		
	});
	
	
		oeffnen.addActionListener(new ActionListener(){
        
		@Override
		public void actionPerformed(ActionEvent arg0) {
			
		  try {
			Kundenauftrag.lesen();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
			
			
		
		}
		
	});

Java:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;


public class Kundenauftrag {
	
 int	auftragnr;
 
 Kunde kunde;
 Artikel [] artikel ;
 
 Kundenauftrag (Kunde kunde,Artikel artikel [],int auftragnr){
	 
	 this.auftragnr= auftragnr;
	 this.kunde=kunde;
	 this.artikel=artikel;
	 
 }
 
 public void speichern (){
	 
	 
	int  i=artikel.length;
	
		  
		 try {
			PrintWriter write = new PrintWriter(new FileWriter("test2.txt"));
			
			
				
				
				
			
			for(i =0;i<artikel.length;i++){
			write.print(artikel [i].artikelnr+i);
			write.print(artikel [i].bezeichnung+i);
			write.print(artikel [i].menge+i);
			write.print(artikel [i].mengeneinheit+i);
			write.print(artikel [i].preis+i);	
				
			}
			
			
			
			write.close();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
		
 }
 public static void lesen () throws IOException
		{
	 BufferedReader reader = new BufferedReader (new FileReader("test2.txt"));
	 
	 System.out.println(reader.readLine());
			
			
		}
 
 
 
}
 

diggaa1984

Top Contributor
Java:
Artikell art;

 speichern.addActionListener(new ActionListener(){
        
        @Override
        public void actionPerformed(ActionEvent arg0) {
            
              Artikel [] ref = art.objekt(art.groesse());
            
            Kundenauftrag kdnauftrag = new Kundenauftrag(kunde, ref,2);
            kdnauftrag.speichern();         
            
            //artikel [n]= new Artikel(artnr.getText(),bezeich.getText());
            
        }
        
    });

das ist Artikell-Objekt ist ja nur in der Leinwand vorhanden, wie sollst du da in der Toolbar drauf zugreifen können. Eine gemeinsame Funktionalität kann man dann nur erreichen wenn beide Listener dieses Objekt kennen um damit zu arbeiten, sollte denk ich klar sein.
Ansonsten ist zu empfehlen, wenn du gleich Aktionen bei mehreren Buttons hast, diese ActionListener in einer separaten Klasse unterzubringen, da der Code eh identisch ist. Aber da musst dem ActionListener möglicherweise beim Erstellen nötige Referenzvariablen mitgeben, damit er damit arbeiten kann.

Edit: ich seh gerade in der Symbolleistenklasse auch eine Variable vom Typ Artikell. Woher kommt die, wo wird die gesetzt, soll das die selbe sein wie bei der Leinwand?!
 
Zuletzt bearbeitet:

java_1985

Mitglied
Daran hatte ich auch am anfang gedacht, aber müsste ich nicht dann für die verschiedene Buttons mehrere Klassen implementieren. Da man die Methode actionPerformed ja nur einmal implementieren kann. Die würden dann nicht zu den verschiedenen Buttons passen.

gruss
 

java_1985

Mitglied
Java:
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class Artikell extends JPanel{
	
	
	
	
	
	  JTextField  pos0, artikelnr0,bez0,menge0, mengeneinheit0,preis0,
	  pos1, artikelnr1,bez1,menge1, mengeneinheit1,preis1,
	  pos2, artikelnr2, bez2, menge2, mengeneinheit2, preis2,
	  pos3, artikelnr3,bez3,menge3, mengeneinheit3,preis3,  
	  pos4, artikelnr4,bez4,menge4, mengeneinheit4,preis4;  
	  
	    JLabel jpos,jartikelnr,jbez,jmenge,jmengeneinheit,jpreis,jeins,jzwei,jdrei,jvier,
	    jfünf,jsechs,jsieben,jacht,jneun,jzehn;
	    
	Artikell()
	{setLayout(null);
	
	
	// JLabels
	
	 jpos = new JLabel("Pos");
	 jartikelnr = new JLabel("Artikelnr");
	 jbez = new JLabel("Bezeichnung");
	 jmenge = new JLabel("Menge");
	 jmengeneinheit = new JLabel("Mengeneiheit");
	 jpreis = new JLabel("Preis");
	 jeins = new JLabel("1.");
	 jzwei = new JLabel("2.");
	 jdrei = new JLabel("3.");
	 jvier = new JLabel("4.");
	 jfünf = new JLabel("5.");
	 jsechs = new JLabel("6.");
	 jsieben = new JLabel("7");
	 jacht = new JLabel("8");
	 jneun = new JLabel("9");
	 jzehn = new JLabel("10");
	 
	  
	//Textfelder 
	 
	
		
     pos0 = new JTextField();
	 artikelnr0 = new JTextField();
	 bez0 = new JTextField();
	 menge0 = new JTextField();
	 mengeneinheit0 = new JTextField();
	 preis0 = new JTextField(); 
	 artikelnr1 = new JTextField();
	  bez1 = new JTextField();
	 menge1 = new JTextField();
	 mengeneinheit1 = new JTextField();
	 preis1 = new JTextField();
	  artikelnr2 = new JTextField();
	 bez2 = new JTextField();
	  menge2= new JTextField();
	 mengeneinheit2 = new JTextField(); 
	 preis2 = new JTextField(); 
	 artikelnr3 = new JTextField(); 
	 bez3 = new JTextField(); 
	 menge3 = new JTextField(); 
	 mengeneinheit3 = new JTextField();
	  preis3 = new JTextField(); 
	  artikelnr4 = new JTextField(); 
	 bez4 = new JTextField(); 
	 menge4 = new JTextField(); 
	 mengeneinheit4 = new JTextField();
	  preis4 = new JTextField(); 
	
	  //Pos wird gesetzt
	 
	 jpos.setBounds(10, 5, 50, 30);
	 jartikelnr.setBounds(160, 5, 100, 30);
	 jbez.setBounds(410, 5, 100, 30);
	  jmenge.setBounds(610, 5, 100, 30);
	 jmengeneinheit.setBounds(810, 5, 100, 30);
	 jpreis.setBounds(1010, 5, 100, 30);
	  jeins.setBounds(10, 55, 50, 30);
	 jzwei.setBounds(10, 105, 100, 30);
	 jdrei.setBounds(10, 155, 100, 30);
	  jvier.setBounds(10, 205, 100, 30);
	 jfünf.setBounds(10, 255, 100, 30);
	 jsechs.setBounds(10, 305, 100, 30);
	  jsieben.setBounds(10, 355, 50, 30);
	 jacht.setBounds(10, 405, 100, 30);
	 jneun.setBounds(10, 455, 100, 30);
	  jzehn.setBounds(10, 505, 100, 30);
	 
	 artikelnr0.setBounds(160,55, 150, 25);
	 bez0.setBounds(410, 55,100, 25);
	 menge0.setBounds(610, 55, 100, 25);
	  mengeneinheit0.setBounds(810,55, 100, 25);
	 preis0.setBounds(1010, 55,100, 25);
	 artikelnr1.setBounds(160,105, 150, 25);
	 bez1.setBounds(410, 105,100, 25);
	 menge1.setBounds(610, 105, 100, 25);
	  mengeneinheit1.setBounds(810,105, 150, 25);
	 preis1.setBounds(1010, 105,100, 25);
	  artikelnr2.setBounds(160,155, 150, 25);
	 bez2.setBounds(410, 155,100, 25);
	 menge2.setBounds(610, 155, 100, 25);
	  mengeneinheit2.setBounds(810,155, 150, 25);
	 preis2.setBounds(1010, 155,100, 25);
	   artikelnr3.setBounds(160,205, 150, 25);
	 bez3.setBounds(410, 205,100, 25);
	 menge3.setBounds(610, 205, 100, 25);
	  mengeneinheit3.setBounds(810,205, 150, 25);
	 preis3.setBounds(1010, 205,100, 25);
	  artikelnr4.setBounds(160,255, 150, 25);
	 bez4.setBounds(410, 255,100, 25);
	 menge4.setBounds(610, 255, 100, 25);
	  mengeneinheit4.setBounds(810,255, 150, 25);
	 preis4.setBounds(1010, 255,100, 25);
	 
	 
	 
	 menge0.setText("0");
	 menge1.setText("0");
	 menge2.setText("0");
	 menge3.setText("0");
	 menge4.setText("0");
	 preis0.setText("0.0");
	 preis1.setText("0.0");
	 preis2.setText("0.0");
	 preis3.setText("0.0");
	 
	 
	 //in Panel einfügen
	 
	 add(artikelnr0);
	 add(bez0);
	 add(menge0);
	 add(mengeneinheit0);
	 add(preis0);
	 add(artikelnr1);
	 add(bez1);
	 add(menge1);
	 add(mengeneinheit1);
	 add(preis1);
	 add(artikelnr2);
	 add(bez2);
	 add(menge2);
	 add(mengeneinheit2);
	 add(preis2);
	 add(artikelnr3);
	 add(bez3);
	 add(menge3);
	 add(mengeneinheit3);
	 add(preis3);
	 add(artikelnr4);
	 add(bez4);
	 add(menge4);
	 add(mengeneinheit4);
	 add(preis4);
	 
	 
	 add(jpos);
	 add(jartikelnr);
	 add(jbez);
	 add(jmenge);
	 add(jmengeneinheit);
	 add(jpreis);
	
	 add(jeins);
	 add(jzwei);
	 add(jdrei);
	 add(jvier);
	 add(jfünf);
	 add(jsechs);
	 add(jsieben);
	 add(jacht);
	 add(jneun);
	 add(jzehn);
	 	 
	}
	
	
		
public int groesse (){
	
	int n =0;
	
	if( artikelnr0 != null){
		n++;
	}
	if(artikelnr1 != null){
		n++;
	}
	if (artikelnr2 !=null){
		n++;
	}
	if( artikelnr3 != null){
		n++;
	}
	if(artikelnr4 != null){
		n++;
	}
	
	return n;
	
}

public Artikel [] objekt (int groesse){
		
		int n = groesse;
		
		Artikel[] artikel = new Artikel[n];
		
		
			if(artikelnr0!=null){
		    artikel [0] = new Artikel(artikelnr0.getText(),bez0.getText(),menge0.getText(),Integer.parseInt(mengeneinheit0.getText()),Double.parseDouble(preis0.getText()));
			
			}
			
			if(artikelnr1!= null ){
			artikel[1]= new Artikel (artikelnr1.getText(),bez1.getText(),menge1.getText(),Integer.parseInt(mengeneinheit1.getText()),Double.parseDouble(preis1.getText()));
			} 
			
				
			if(artikelnr2 !=null){
				
			artikel[2]= new Artikel (artikelnr2.getText(),bez2.getText(),menge2.getText(),Integer.parseInt(mengeneinheit2.getText()),Double.parseDouble(preis2.getText()));	
			}
		
	       if(artikelnr3 !=null){
				
			artikel[3]= new Artikel (artikelnr3.getText(),bez3.getText(),menge3.getText(),Integer.parseInt(mengeneinheit3.getText()),Double.parseDouble(preis3.getText()));	
			}
	       if(artikelnr4 !=null){
				
			artikel[4]= new Artikel (artikelnr4.getText(),bez4.getText(),menge4.getText(),Integer.parseInt(mengeneinheit4.getText()),Double.parseDouble(preis4.getText()));	
			}
		
			
			return artikel;
	
	 
	  
  }

}
 

java_1985

Mitglied
hab es jetzt mit einer seperaten Klasse versucht klapt aber immernoch nicht :-(

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JTextField;


public class Aktion implements ActionListener {

	Artikell art;

	
	Aktion(Artikell art){
	
		this.art= art;
	}
	
	
	
	public void actionPerformed(ActionEvent arg0) {
		System.out.print(art.artikelnr0.getText());
		
	}

}
 

java_1985

Mitglied
Das sind die Exception bei folgendem Coding.

Java:
	 button3.addActionListener(new ActionListener(){
	        
			@Override
			public void actionPerformed(ActionEvent arg0) {
				
				  Artikel [] ref = art.objekt(art.groesse());
			    
				Kundenauftrag kdnauftrag = new Kundenauftrag(kunde, ref,2);
				kdnauftrag.speichern();			
				
				//artikel [n]= new Artikel(artnr.getText(),bezeich.getText());
				
			}
			
		});


Java:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at Artikell.objekt(Artikell.java:218)
	at Symbolleiste$4.actionPerformed(Symbolleiste.java:133)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
 

Ebenius

Top Contributor
Die ganzen parseInt(...)- und parseDouble(...)-Aufrufe schlagen natürlich fehl, wenn die Texte leer sind. Offensichtlich hast Du eines der mengeneinheitX-Textfelder leer gelassen. Das geht dann natürlich schief.
Der StackTrace sagt Dir wo es schief ging:
at Artikell.objekt(Artikell.java:218)
Da gehst Du hin und guckst nach, wie Du dort mit leeren Textfeldern umgehen willst.

Ebenius
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben