Array in Combobox ausnutzen???

Stinkybrain

Mitglied
Guten morgen.
Mein projekt sieht vor für ein pen and paper spiel eine Oberfläche für den Spielleiter zu basteln
ich weiß das der code so nicht funktioniert aber habe auch keine Idee.
Natürlich könnte ich auch nur ein bild anhängen aber das wäre nur die Notlösung.

Also meine frage ist wie kiege ich in ein switch/case eine programierung rein das ich erst sachen für Spieler 1 aus der Combobox und dann für spieler 2 usw aus der Kombobox auslesen kann
Java:
public class grundgerüst {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		final boolean a = false;
		
		// Bilder laden
		final Icon iconApo = new ImageIcon(JButton.class.getResource("/images/Apo.jpg"));
		final Icon iconChr = new ImageIcon( JButton.class.getResource("/images/Chr.png") );
	/*	final Icon iconHel = new ImageIcon( JLabel.class.getResource( "/images/Hel.tiff") );
		final Icon iconJeh = new ImageIcon( JLabel.class.getResource( "/images/Jeh.tiff") );
		final Icon iconRic = new ImageIcon( JLabel.class.getResource( "/images/Ric.tiff") );
		final Icon iconSchr = new ImageIcon( JLabel.class.getResource( "/images/Schr.tiff") );
		final Icon iconSip = new ImageIcon( JLabel.class.getResource( "/images/Sip.tiff") );
		final Icon iconSpi = new ImageIcon( JLabel.class.getResource( "/images/Spi.tiff") );
		final Icon iconWied = new ImageIcon( JLabel.class.getResource( "/images/Wie.tiff") );
		*/
		
		
		
		
		JFrame Oberflaeche = new JFrame();
		Oberflaeche.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Oberflaeche.setLayout(null);
		
		JLabel NumberofPlayers = new JLabel("Spieler Anzahl");
		NumberofPlayers.setBounds(20, 0, 120, 30);
		
		
	    JComboBox Playernumbers = new JComboBox();
		Playernumbers.addItem("2 Spieler");
		Playernumbers.addItem("3 Spieler");
		Playernumbers.addItem("4 Spieler");
		Playernumbers.addItem("5 Spieler");
		Playernumbers.addItem("6 Spieler");
		Playernumbers.addItem("7 Spieler");
		Playernumbers.addItem("8 Spieler");
		Playernumbers.addItem("9 Spieler");
		
		Playernumbers.setBounds(20, 30, 80, 20);
		
/*		Playernumbers.addItemListener(new ItemListener()
		{
			@Override public void itemStateChanged (ItemEvent e)
			{
			
				switch(Playernumbers.getSelectedIndex())
				{
				      case 0 : Playernumbers.getItemAt(Anzahl);
				      case 1 : x = 3;break;
				      case 2 : x = 4;break;
				      case 3 : x = 5;break;
				      case 4 : x = 6;break;
				      case 5 : x = 7;break;
				      case 6 : x = 8;break;
				      case 7 : x = 9;break;				     			      			      				      
				}
				
			}
		});
		
*/		
		
		
		int x =4;
		
		int VertikalButton = 250;
	
			
		final JButton[] klassenfotos = new JButton[x];
		
		Oberflaeche.add(NumberofPlayers);
		Oberflaeche.add(Playernumbers);
		Oberflaeche.setSize(500, 600);
		Oberflaeche.setVisible(true);
		for (int Anzahl = 0; Anzahl <x; Anzahl++)
		{
			
			JButton button = new JButton("Kopf");
			button.setBounds(VertikalButton, 60, 80, 20);
			Oberflaeche.add(button);
			
	
			final JComboBox c1 = new JComboBox();
		        c1.addItem("Heron");
		        c1.addItem("Apokalipiker");
		        c1.setBounds(VertikalButton- 100, 40, 80, 20);
		   
		    
/*
     Hier ist das problem das ich den array nicht einzeln ansteuern kann

*/

 

		    
		    c1.addItemListener(new ItemListener()
		    {
		    	@Override public void itemStateChanged (ItemEvent e)
		    	{
		    		switch(c1.getSelectedIndex())
		    		{
		    		case 0 :klassenfotos[0].setIcon(iconApo);break;	    		
		    		case 1 : klassenfotos[1].setIcon(iconChr);break;
		    		case 2 : klassenfotos[2].setIcon(iconApo);break;
		    		
		    		}
		    	}
		   } );
		    Oberflaeche.add(c1);
			
			JButton buttonRumpf = new JButton("Rumpf");
			buttonRumpf.setBounds(VertikalButton, 120, 80, 20);
			Oberflaeche.add(buttonRumpf);
			
			
			JButton buttonUnterleib = new JButton("Unterleib");
			buttonUnterleib.setBounds(VertikalButton, 180, 80, 20);
			Oberflaeche.add(buttonUnterleib);
			
			
		    klassenfotos[Anzahl] = new JButton();
			klassenfotos[Anzahl].setBounds(VertikalButton - 150, 120, 120, 120);
			klassenfotos[Anzahl].setText("Spieler" + Anzahl);
			Oberflaeche.add(klassenfotos[Anzahl]);
			VertikalButton += 250;
			
			
		}
		
		
		
	}

}

Ja mein code ist etwas unübersichtlich sry
hoffe ihr könnt mir weiter helfen sonst versuch ich es auf die Leichtere variante
 
Bitte was ?

Also meine frage ist wie kiege ich in ein switch/case eine programierung rein das ich erst sachen für Spieler 1 aus der Combobox und dann für spieler 2 usw aus der Kombobox auslesen kann

Ich kann hier deine Fragestellung nicht einmal ansatzweise auf eine konkrete Beschreibung ummünzen...

Java:
/*
     Hier ist das problem das ich den array nicht einzeln ansteuern kann
 
*/

Arrays spricht man per index an :

z.B
Java:
arr[8] = "Hey, ich bin ein String";

Willst du sicherstellen das erst für Spieler 1 und dann für alle anderen Spieler ausgewählt werden kann ? oder wie soll man das Verstehen ?

[TIPP]Eine JComboBox verwendet zum halten ihrer Daten ein Modell, genauer gesagt ein
Code:
DefaultComboBoxModel
welchem du die Daten hinzufügst[/TIPP]

So sieht z.B der Standadkonstruktor der JComboBox aus

Java:
 public JComboBox() {
        super();
        setModel(new DefaultComboBoxModel<E>());
        init();
    }

Wenn du nun add() aufrufst fügst du deine Daten eigentlich dem Modell und nicht der Box hinzu, die JComboBox dient nur zur Visualisierung dieser Daten .
 
Zuletzt bearbeitet:
Ok füge jetzt mal ein Bild hinzu wie es bis jetzt aus sieht vieleicht verdeutlicht es dann das Projekt besser.


Habe jetzt auch noch versucht den index der combobox über eine while schleife zu ändern .
klappt aber nicht weil auf der einen seite sagt mir Eclipse das ich int = final machen soll kann es dann aber logischerweise nicht ändern.
Java:
int players = 0;
/*    
		    while ( players <= x)
		    {	
		    
		    c1.addItemListener(new ItemListener()
		    {
		    	@Override public void itemStateChanged (ItemEvent e)
		    	{
		    		switch(c1.getSelectedIndex())
		    		{
		    		case 0 :klassenfotos[players].setIcon(iconApo);break;	    		
		    		case 1 : klassenfotos[players].setIcon(iconChr);break;
		    		case 2 : klassenfotos[players].setIcon(iconApo);break;
		    		
		    		}
		    	}
		   } );
		      players = players + 1;   
		    }
		*/
 

Anhänge

  • vorschau.jpg
    vorschau.jpg
    44,2 KB · Aufrufe: 35
Zuletzt bearbeitet:
1. nicht alles in die Main rein kloppen

2. soweit ich das verstehe willst du einen Spieler nach dem andern auswählen können, falls ja erstell dir eine variable die angibt welcher spieler gerade auswählt

Java:
public class grundgerüst {
 

 // Bilder laden
        final Icon iconApo = new ImageIcon(JButton.class.getResource("/images/Apo.jpg"));
        final Icon iconChr = new ImageIcon( JButton.class.getResource("/images/Chr.png") );
    /*  final Icon iconHel = new ImageIcon( JLabel.class.getResource( "/images/Hel.tiff") );
        final Icon iconJeh = new ImageIcon( JLabel.class.getResource( "/images/Jeh.tiff") );
        final Icon iconRic = new ImageIcon( JLabel.class.getResource( "/images/Ric.tiff") );
        final Icon iconSchr = new ImageIcon( JLabel.class.getResource( "/images/Schr.tiff") );
        final Icon iconSip = new ImageIcon( JLabel.class.getResource( "/images/Sip.tiff") );
        final Icon iconSpi = new ImageIcon( JLabel.class.getResource( "/images/Spi.tiff") );
        final Icon iconWied = new ImageIcon( JLabel.class.getResource( "/images/Wie.tiff") );
        */

        JFrame Oberflaeche = new JFrame();
        JComboBox Playernumbers = new JComboBox();
        boolean a = false;
        JLabel NumberofPlayers = new JLabel("Spieler Anzahl");


         int x =4;
         int VertikalButton = 250;
         JButton[] klassenfotos = new JButton[x];


         JComboBox c[] = new JComboBox()[x]; //du kannst auch einen Combobox array erschaffen
          




         public static void main(String[] args) {
       
        Oberflaeche.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Oberflaeche.setLayout(null);
        
       
        NumberofPlayers.setBounds(20, 0, 120, 30);
        
        Playernumbers.addItem("2 Spieler");
        Playernumbers.addItem("3 Spieler");
        Playernumbers.addItem("4 Spieler");
        Playernumbers.addItem("5 Spieler");
        Playernumbers.addItem("6 Spieler");
        Playernumbers.addItem("7 Spieler");
        Playernumbers.addItem("8 Spieler");
        Playernumbers.addItem("9 Spieler");
        
        Playernumbers.setBounds(20, 30, 80, 20);
        
/*      Playernumbers.addItemListener(new ItemListener()
        {
            @Override public void itemStateChanged (ItemEvent e)
            {
            
                switch(Playernumbers.getSelectedIndex())
                {
                      case 0 : Playernumbers.getItemAt(Anzahl);
                      case 1 : x = 3;break;
                      case 2 : x = 4;break;
                      case 3 : x = 5;break;
                      case 4 : x = 6;break;
                      case 5 : x = 7;break;
                      case 6 : x = 8;break;
                      case 7 : x = 9;break;                                                                       
                }
                
            }
        });
        
*/      

        Oberflaeche.add(NumberofPlayers);
        Oberflaeche.add(Playernumbers);
        Oberflaeche.setSize(500, 600);
        Oberflaeche.setVisible(true);
        for (int Anzahl = 0; Anzahl <x; Anzahl++)
        {
            
            JButton button = new JButton("Kopf");
            button.setBounds(VertikalButton, 60, 80, 20);
            Oberflaeche.add(button);
            
            c[i].addItem("Heron");
            c[i].addItem("Apokalipiker");
            c[i].setBounds(VertikalButton- 100, 40, 80, 20);

            
/*
     Hier ist das problem das ich den array nicht einzeln ansteuern kann
 
*/
 
 
 
            
            c[0].addItemListener(new ItemListener()
            {
                @Override public void itemStateChanged (ItemEvent e)
                {
                    switch(c[0].getSelectedIndex())
                    {
                    case 0 :klassenfotos[0].setIcon(iconApo);break;             
                    case 1 : klassenfotos[1].setIcon(iconChr);break;
                    case 2 : klassenfotos[2].setIcon(iconApo);break;
                    
                    }
                }
           } );
            Oberflaeche.add(c[0]);
            
            JButton buttonRumpf = new JButton("Rumpf");
            buttonRumpf.setBounds(VertikalButton, 120, 80, 20);
            Oberflaeche.add(buttonRumpf);
            
            
            JButton buttonUnterleib = new JButton("Unterleib");
            buttonUnterleib.setBounds(VertikalButton, 180, 80, 20);
            Oberflaeche.add(buttonUnterleib);
            
            
            klassenfotos[Anzahl] = new JButton();
            klassenfotos[Anzahl].setBounds(VertikalButton - 150, 120, 120, 120);
            klassenfotos[Anzahl].setText("Spieler" + Anzahl);
            Oberflaeche.add(klassenfotos[Anzahl]);
            VertikalButton += 250;
            
            
        }
        
        
        
    }
 
}
 
Danke!!!

aber die Schleife "(anzahl)" stoppt bei den einträgen c;
wenn ich diese ausklammer ( /*...*/ ) dann geht der code wieder ansonsten zeigt er eben nur einen kopf button

schaue mal ob ich sie nachher oben unterbringen kann.
 
Hallo ich bins nochmal.

Ich glaube ich habe mein problem nicht richtig ausgedrückt.

1. Habe ich jetzt die Namen in der Combobox einzel eingegeben
diese soll dann im programm je nach Anzahl der Spieler ausgegeben werden.

2. Dann möchte ich das zu jeder Combobox ein Bild für den jeweiligen Spieler einstellen will.
Dazu dachte ich mir ich könnte den Index Anzahlkleiner ändern damit ich eben für jede Combobox
ein eigendes Bild gestallten kann.

Dieses klappt aber nicht da ich den Array-index von " klassenfotos " in der for-Schleife nicht ändern
kann.

3. Wenn ich den Index von klassenfotos z.B.: zu [2] mache klappt es aber dann kann ich
halt nur den 3 Spieler ein Bild zuweisen.

Java:
     for ( int Anzahlkleiner = 0; Anzahlkleiner < x; Anzahlkleiner ++)
            {
               final JComboBox charakterListe = new JComboBox();
               charakterListe.addItem("bitte Auswählen");
               charakterListe.addItem("Heron");
               charakterListe.addItem("Apokalyptiker");
               charakterListe.addItem("Hellvetika");
               charakterListe.addItem("Jehamedaner");
               charakterListe.addItem("Richter");
               charakterListe.addItem("Schrotter");
               charakterListe.addItem("Sipplinge");
               charakterListe.addItem("Spitalier");
               charakterListe.addItem("Wiedertäufer");
               charakterListe.setBounds(VertikalButton-100, 80, 80, 20);  // hier wird die Box dupliziert 
                                                                                               // und verschoben
               Oberflaeche.add(charakterListe);
               charakterListe.addItemListener(new ItemListener()
               {
            	   @Override public void itemStateChanged (ItemEvent e)
            	   {
            		   switch(charakterListe.getSelectedIndex())
            		   {
            		   case 0 : klassenfotos[Anzahlkleiner].setIcon(iconApo);break;
            		   case 1 : klassenfotos[Anzahlkleiner].setIcon(iconChr);break;
            		   case 2 : klassenfotos[Anzahlkleiner].setIcon(iconApo);break;
            		   case 3 : klassenfotos[Anzahlkleiner].setIcon(iconChr);break;
            		   case 4 : klassenfotos[Anzahlkleiner].setIcon(iconApo);break;
            		   case 5 : klassenfotos[Anzahlkleiner].setIcon(iconChr);break;
            		   case 6 : klassenfotos[Anzahlkleiner].setIcon(iconApo);break;
            		   case 7 : klassenfotos[Anzahlkleiner].setIcon(iconChr);break;
            		   case 8 : klassenfotos[Anzahlkleiner].setIcon(iconApo);break;
            		   case 9 : klassenfotos[Anzahlkleiner].setIcon(iconChr);break;
            		   case 10: klassenfotos[Anzahlkleiner].setIcon(iconApo);break;
            		   
            		   
            		   
            		   }
            	   }
               });
            
            }
              Oberflaeche.add(charakterListe);
 

Neue Themen


Zurück
Oben