Bilder auf Buttons per Klick tauschen ( Puzzle )

HansK

Mitglied
Hallo,
Ich bräuchte Codingansätze um Bilder, welche auf Buttons liegen, zu tauschen!
Man sollte auf den einen Button klicken, dann auf einen zweiten, und somit die Bilder getauscht bekommen. Habe schon alles probiert aber ich bekomme es einfach nicht hin.
Das ganze soll ein Puzzlespiel werden.

MfG,
Hans
 
Dort wurde die Frage leider nicht so gut beantwortet das ich es irgendwie lösen konnte.
Ich bin ein Anfänger und bräuchte da schon Coding Beispiele.

Gruß,
Hans
 
Zuletzt bearbeitet:
Wir wurde in jedem Thread eine Frage gestellt, du hast dich aber gar nicht mehr geäußert. Wie soll man dir da denn helfen? :bahnhof: Alle paar Tage das selbe Thema aufmachen ohne Rückmeldung ist keine Lösung.
 
Hier mal ein Ansatz zum Icontausch. Wobei Du mit der Vorgehensweise (s. m. Kommentar in einem der anderen Posts) vermutlich nicht glücklich wirst.
Java:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ButtoIconSwap extends JFrame implements ActionListener {
	private int index;
	private JButton[] button;
	private JLabel label;
	
	public ButtoIconSwap() {
		index = -1;
		JPanel panel = new JPanel(new GridLayout(1,3));
		button = new JButton[3];
		for (int i=0; i<button.length; i++) {
			button[i] = new JButton();
			button[i].addActionListener(this);
			//button[i].setIcon(.......);
			panel.add(button[i]);
		}
		this.getContentPane().add(panel, BorderLayout.CENTER);
		this.getContentPane().add(label = new JLabel(" Ersten Button selektieren! "), BorderLayout.SOUTH);
	}
	
	public void actionPerformed(ActionEvent e) {
		int curIndex = -1;
		for (int i=0; i<button.length; i++) {
			if (e.getSource().equals(button[i])) {
				curIndex = i;
				break;
			}
		}
		if(index==-1) {
			index = curIndex;
			label.setText(" Zweiten Button selektieren! ");
		}
		else {
			swapIcons(index, curIndex);
			index = -1;
			label.setText(" Ersten Button selektieren! ");
		}
	}
	
	private void swapIcons(int index1, int index2) {
		Icon icon = button[index1].getIcon();
		button[index1].setIcon(button[index2].getIcon());
		button[index2].setIcon(icon);
	}

	public static void main(String[] args) {
		JFrame frame = new ButtoIconSwap();
		frame.setBounds(0, 0, 400, 200);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
 
Jetzt muss ich erstmal kniffeln wie ich das in mein Programm reinbekomme.
Ich kann ja mal mein bisheriges Coding zeigen.

Java:
import java.lang.String;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.*;
import java.applet.Applet;
import javax.swing.JFrame;
import java.awt.Container;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.io.*;

public class MenuExample extends JFrame {


  public MenuExample() {
    super("GAME");   // Fenstertitel an JFrame(String) übergeben
      setDefaultCloseOperation( EXIT_ON_CLOSE); // Fenster schließen = Ende
      
    Container contentPane = getContentPane();
    contentPane.setLayout( new GridLayout(3,3));  // Gridlayout 3x3 erzeugen

  final JButton[] arrayMitButtons = new JButton[10];
              for (int i = 1; i < arrayMitButtons.length; i++) {
              String index = String.valueOf(i);
              ImageIcon image = new
              ImageIcon("C:\\berg" +
              index + index + ".jpg");
              arrayMitButtons[i] = new JButton(image);
              //add(arrayMitButtons[i]);
              //arrayMitButtons[i].setVisible(false);
              }
//              JButton[] arrayCopy = new JButton[10];
//              for (int i = 1; i < arrayCopy.length; i++) {
//                arrayCopy[i] = arrayMitButtons[i];
//              }
//              System.out.println(arrayCopy[1].equals(arrayMitButtons[2]));


              for(int i = 1; i < arrayMitButtons.length; i++){
                JButton tmp = arrayMitButtons[i];
                int zelle = (int) (Math.random()*(arrayMitButtons.length - i) + i);
                arrayMitButtons[i] = arrayMitButtons[zelle];
                arrayMitButtons[zelle] = tmp;
                //System.out.println(i + "; " + zelle);

              }
              for(int i = 1; i <  arrayMitButtons.length; i++         ){
                add(arrayMitButtons[i]);
                arrayMitButtons[i].setVisible(false);
              }



    JMenu menu, submenu;
    JMenuItem menuItem;
    JMenuBar menuBar = new JMenuBar();

    menu = new JMenu( "GAME");          // Erzeugen eines Hauptmenüpunktes
    menuBar.add( menu);                       // Hinzufügen des Hauptmenüpunktes
    menuItem = new JMenuItem( "New Game"); // Erzeugen eines Untermenüs von Puzzle Pro
    menu.add(menuItem);

    menuItem.addActionListener( new ActionListener() {
      public void actionPerformed( ActionEvent e) {
              for (int i = 1; i < arrayMitButtons.length; i++) {
              arrayMitButtons[i].setVisible(true);
              }
      }
    });

    
   /*  menuItem = new JMenuItem( "Bild 1");      // Erzeugen eines Untermenüs von New Game
    submenu.add( menuItem);                   // Untermenü wird dem Submenü hinzugefügt
    menuItem.addActionListener( new ActionListener() {
      public void actionPerformed( ActionEvent e) {
              for (int i = 1; i < arrayMitButtons.length; i++) {
              arrayMitButtons[i].setVisible(true);
              }
      }
    });
    menuItem = new JMenuItem( "Bild 2");      // Erzeugen eines Untermenüs von New Game
    submenu.add( menuItem);                   // Untermenü wird dem Submenü hinzugefügt
    menuItem = new JMenuItem( "Bild 3");      // Erzeugen eines Untermenüs von New Game
    submenu.add( menuItem);                   // Untermenü wird dem Submenü hinzugefügt


    menuItem = new JMenuItem( "Reset"); // Erzeugen eines Untermenüs von Puzzle Pro
    menu.add(menuItem);

    menuItem.addActionListener( new ActionListener() {
      public void actionPerformed( ActionEvent e) {
              for (int i = 1; i < arrayMitButtons.length; i++) {
              arrayMitButtons[i].setVisible(false);
              }


      }
    });
    */
                                                       // Untermenü wird dem Hauptmenü hinzugefügt
    menuItem = new JMenuItem( "Exit");                    // Erzeugen eines Untermenüs von Puzzle Pro
    menu.add(menuItem);                                   // Untermenü wird dem Hauptmenü hinzugefügt
    menuItem.addActionListener( new ActionListener() {
      public void actionPerformed( ActionEvent e) {
        System.exit(0);                                      // Durch wählen des Menupunketes "Exit" wird das Fenster beendet
      }
    });

    menu = new JMenu( "Optionen");           // Erzeugen eines Hauptmenüpunktes
    menuBar.add( menu);                        // Hinzufügen des Hauptmenüpunktes
    
   /* submenu = new JMenu( "Schwierigkeit");   // Erzeugen eines Sub-  bzw Untermenüs von Optionen
    menu.add( submenu);                      // Hinzufügen des Submenüpunktes
    menuItem = new JMenuItem( "Leicht");     // Erzeugen eines Untermenüs von Schwierigkeit
    submenu.add( menuItem);                  // Untermenü wird dem Submenü hinzugefügt
    menuItem = new JMenuItem( "Mittel");     // Erzeugen eines Untermenüs von Schwierigkeit
    submenu.add( menuItem);                  // Untermenü wird dem Submenü hinzugefügt
    menuItem = new JMenuItem( "Schwer");     // Erzeugen eines Untermenüs von Schwierigkeit
    submenu.add( menuItem);                  // Untermenü wird dem Submenü hinzugefügt
    */
    
    menuItem = new JMenuItem( "Hilfe");
    menu.add(menuItem);
    menuItem.addActionListener( new ActionListener() {
      public void actionPerformed( ActionEvent e) {
        try
        {
        Desktop.getDesktop().open(new File("Hilfe.txt"));
        }
        catch(Exception eref)
        {
        }
      }
    });
    menuItem = new JMenuItem( "Handbuch"); // Erzeugen eines Untermenüs von Puzzle Pro
    menu.add(menuItem);
    menuItem.addActionListener( new ActionListener() {
      public void actionPerformed( ActionEvent e) {
        try
        {
        Desktop.getDesktop().open(new File("Handbuch.pdf"));
        }
        catch(Exception eref)
        {
        }
      }
    });
    menuItem = new JMenuItem( "About"); // Erzeugen eines Untermenüs von Puzzle Pro
    menu.add(menuItem);
    menuItem.addActionListener( new ActionListener() {
      public void actionPerformed( ActionEvent e) {
             JOptionPane.showMessageDialog(null, "                                        ", "About", JOptionPane.CLOSED_OPTION);
      }
    });
    
    setJMenuBar( menuBar);                  // Erzeugen der kompletten Menüleiste
    setSize( 800, 600);                     // Größe der Menüleiste festlegen
    setResizable ( false ); // Fenster ist nicht veränderbar
  }



  public static void main( String[] args) {
    new MenuExample().setVisible( true);    // main() endet, Programm läuft weiter
  }
}

Könnte ich Teile von deinem Coding schon einbinden?
 
Noch eine Frage,

wie könnte ich denn das Coding schreiben das die Bilder direkt aus meinem Codingordner genommen werden und ich nicht den Pfad angeben muss? Kenne das nämlich nur so aber anders wäre es ja praktisch wenn jemand das Programm auf einem anderen Rechner starten will.

Gruß,
Hans
 
Kommt darauf an, wie Du Dein Projekt organisierst. ImageIO.read(...) kann auch mit relativen Pfaden umgehen.
Ich lade Bilder grundsätzlich über
Code:
getClass().getResource("...")
da ich Applikation eigentlich immer als jar verteile und notwendige Bilder/Icons mit hineinpacke.
 

Neue Themen


Zurück
Oben