Hilfe! Java Swing

D

deddy

Da ich am 29.01.2010 diese kleines Speil abgeben muss, brauche dringend Hilfe..

Die Oberfläche:

Java:
package spiel;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;

import javax.swing.*;






public class puzzle extends JFrame implements ActionListener{
	
	private JPanel panel1, panel2;
	private Image source;
	//für panel1
	private JButton button0,button1,button2,button3,button4,button5,button6,button7,button8,button9,button10,button11;
	private JButton button_0,button_1,button_2,button_3,button_4,button_5,button_6,button_7,button_8,button_9,button_10,button_11;
	//für panel2
	private Image image0,image1,image2,image3,image4,image5,image6,image7,image8,image9,image10,image11;
	private Image image_0,image_1,image_2,image_3,image_4,image_5,image_6,image_7,image_8,image_9,image_10,image_11;
	int width, height;
	public puzzle(){
		panel1 = new JPanel();
		panel2 = new JPanel();
		panel1.setLayout(new GridLayout(4,4,0,0));
		panel2.setLayout(new GridLayout(4,4,0,0));
	
		
		ImageIcon theMonsters = new ImageIcon(puzzle.class.getResource("front.jpg"));
		source = theMonsters.getImage();
		
		width = theMonsters.getIconWidth();
		height = theMonsters.getIconHeight();
		
		add(Box.createRigidArea(new Dimension(0,5)), BorderLayout.NORTH);
		add(panel1, BorderLayout.WEST);
		
		button0 = new JButton();
		button0.addActionListener(this);
		panel1.add(button0);
		image0 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(0*width/3, 0*height/4, (width/3)+1, height/4))); 
		button0.setIcon(new ImageIcon(image0));
		

		button1 = new JButton();
		button1.addActionListener(this);
		panel1.add(button1);
		image1 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(1*width/3, 0*height/4, (width/3)+1, height/4))); 
		button1.setIcon(new ImageIcon(image1));
		

		button2 = new JButton();
		button2.addActionListener(this);
		panel1.add(button2);
		image2 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(2*width/3, 0*height/4, (width/3)+1, height/4))); 
		button2.setIcon(new ImageIcon(image2));
		

		button3 = new JButton();
		button3.addActionListener(this);
		panel1.add(button3);
		image3 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(0*width/3, 1*height/4, (width/3)+1, height/4))); 
		button3.setIcon(new ImageIcon(image3));
		

		button4 = new JButton();
		button4.addActionListener(this);
		panel1.add(button4);
		image4 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(1*width/3, 1*height/4, (width/3)+1, height/4))); 
		button4.setIcon(new ImageIcon(image4));
		

		button5 = new JButton();
		button5.addActionListener(this);
		panel1.add(button5);
		image5 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(2*width/3, 1*height/4, (width/3)+1, height/4))); 
		button5.setIcon(new ImageIcon(image5));
		

		button6 = new JButton();
		button6.addActionListener(this);
		panel1.add(button6);
		image6 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(0*width/3, 2*height/4, (width/3)+1, height/4))); 
		button6.setIcon(new ImageIcon(image6));
		

		button7 = new JButton();
		button7.addActionListener(this);
		panel1.add(button7);
		image7 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(1*width/3, 2*height/4, (width/3)+1, height/4))); 
		button7.setIcon(new ImageIcon(image7));
		

		button8 = new JButton();
		button8.addActionListener(this);
		panel1.add(button8);
		image8 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(2*width/3, 2*height/4, (width/3)+1, height/4))); 
		button8.setIcon(new ImageIcon(image8));
		

		button9 = new JButton();
		button9.addActionListener(this);
		panel1.add(button9);
		image9 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(0*width/3, 3*height/4, (width/3)+1, height/4))); 
		button9.setIcon(new ImageIcon(image9));
		

		button10 = new JButton();
		button10.addActionListener(this);
		panel1.add(button10);
		image10 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(1*width/3, 3*height/4, (width/3)+1, height/4))); 
		button10.setIcon(new ImageIcon(image10));
		

		button11 = new JButton();
		button11.addActionListener(this);
		panel1.add(button11);
		image11 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(2*width/3, 3*height/4, (width/3)+1, height/4))); 
		button11.setIcon(new ImageIcon(image11));
		//ende für Panel 1, anfang panel 2
	
		
		add(Box.createRigidArea(new Dimension(0,5)), BorderLayout.NORTH);
		add(panel2, BorderLayout.EAST);
		
		button_0 = new JButton();
		button_0.addActionListener(this);
		panel2.add(button_0);
		image_0 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(0*width/3, 0*height/4, (width/3)+1, height/4))); 
		button_0.setIcon(new ImageIcon(image_0));
		

		button_1 = new JButton();
		button_1.addActionListener(this);
		panel2.add(button_1);
		image_1 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(1*width/3, 0*height/4, (width/3)+1, height/4))); 
		button_1.setIcon(new ImageIcon(image_1));
		

		button_2 = new JButton();
		button_2.addActionListener(this);
		panel2.add(button_2);
		image_2 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(2*width/3, 0*height/4, (width/3)+1, height/4))); 
		button_2.setIcon(new ImageIcon(image_2));
		

		button_3 = new JButton();
		button_3.addActionListener(this);
		panel2.add(button_3);
		image_3 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(0*width/3, 1*height/4, (width/3)+1, height/4))); 
		button_3.setIcon(new ImageIcon(image_3));
		

		button_4 = new JButton();
		button_4.addActionListener(this);
		panel2.add(button_4);
		image_4 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(1*width/3, 1*height/4, (width/3)+1, height/4))); 
		button_4.setIcon(new ImageIcon(image_4));
		

		button_5 = new JButton();
		button_5.addActionListener(this);
		panel2.add(button_5);
		image_5 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(2*width/3, 1*height/4, (width/3)+1, height/4))); 
		button_5.setIcon(new ImageIcon(image_5));
		

		button_6 = new JButton();
		button_6.addActionListener(this);
		panel2.add(button_6);
		image_6 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(0*width/3, 2*height/4, (width/3)+1, height/4))); 
		button_6.setIcon(new ImageIcon(image_6));
		

		button_7 = new JButton();
		button_7.addActionListener(this);
		panel2.add(button_7);
		image_7 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(1*width/3, 2*height/4, (width/3)+1, height/4))); 
		button_7.setIcon(new ImageIcon(image_7));
		

		button_8 = new JButton();
		button_8.addActionListener(this);
		panel2.add(button_8);
		image_8 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(2*width/3, 2*height/4, (width/3)+1, height/4))); 
		button_8.setIcon(new ImageIcon(image_8));
		

		button_9 = new JButton();
		button_9.addActionListener(this);
		panel2.add(button_9);
		image_9 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(0*width/3, 3*height/4, (width/3)+1, height/4))); 
		button_9.setIcon(new ImageIcon(image_9));
		

		button_10 = new JButton();
		button_10.addActionListener(this);
		panel2.add(button_10);
		image_10 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(1*width/3, 3*height/4, (width/3)+1, height/4))); 
		button_10.setIcon(new ImageIcon(image_10));
		

		button_11 = new JButton();
		button_11.addActionListener(this);
		panel2.add(button_11);
		image_11 = createImage(new FilteredImageSource(source.getSource(),
				new CropImageFilter(2*width/3, 3*height/4, (width/3)+1, height/4))); 
		button_11.setIcon(new ImageIcon(image_11));

		setSize(1100, 480);
		setTitle("Puzzle");
		setResizable(true);
		setLocation(100,100);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setVisible(true);
		
		
		
	}
	

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

	        new puzzle();

	 }

}



wie kann ich die Bilder vertauschen?.. wenn z.b: ich klicke ein bildteil von dem linken puzzle und ein Bildteil von dem rechten puzzle, sollten die bilder ihre Position tauschen.

gruß
 
Hi,
so plump wie du die Frage gestellt hast, so plump stelle ich die Antwort:
1. Ersten Buttondruck abspeichern
2. Beim zweiten Buttondruck die Bilder vertauschen
3. Speichereintrag löschen

Damit das auf tutorials.de besser funktioniert, wird zumindest ein Ansatz vorausgesetzt, denn hier weiß jetzt keiner wo dein Problem ist. Wie wäre es mit einem Ansatz zum Problem, du erkärst, was du nicht schaffst und wir helfen dir weiter.
Das ist nicht böse gemeint, aber keiner hat 1) Lust sich in Quellcode einzuarbeiten, dessen Sinn er nicht versteht (du sagest, es wird ein Puzzle werden aber nicht welcher Art. Ich kenne kein Puzzle mit einem linkem und einem rechtem Teil) und 2) Lust, dein Problem zu erraten.

Also, auf ein Neues,
DosCoder
 
mein Problem liegt da, ich weiss nicht wie ich in der actionPerformed(ActionEvent e) den ersten buttondruck abspeichern, und beim zweiten die Bilder vertauschen und den Speichereintrag löscht.
Ich weiss nicht die Idee zu realisieren..

Das Puzzlespiel gibts noch nicht, das ist ein spiel, das ich selber ausdenkt.

das andere ist, dass die einzelnbilder zuerst vertauscht werden, dass das Spiel ein Puzzle ist.

das Spiel: vertauschte Bilder zurück zu setzen, in dem ein Bild von linken panel klickt und ein Bild von rechtem Panel klickt und dass die Positionen sich ändern. das Spiel beendet, wenn die Bilder in ihre Positonen sind.

mfg
 
Klassennamen schreibt man groß.
Warum speicherst du den ersten Button per ActionEvent.getSource nicht einfach in ne Klassenvariable? Wäre wohl der simpelste Weg.
Bildervertauschen ist einfach: 1 -> Cachevariable, 2 -> 1, Cachevariable -> 2.
 
ich brauche irgendwas reales, was ich bearbeiten kann. ich habe nicht so viele Ahnung und es sind soviele wege nach Rome in Java...

ja die klassenname ändere ich. Aber wie man macht, wie DosCoder empfiehlt, weisse ich nicht.. buttondruck Abspeichern zu schreiben in Google hilft nichts konkretes
 
Hi,
du sollst eine Variable als JButton deklarieren und dort dann den zuerst gedrückt Button hineinschreiben. Wenn der nächste Button gedrückt wurde, dann musst du zuerst schauen, ob diese Variable schon belegt ist. Wenn ja, dann hast du doch den zuvor gedrückten Button und den gerade gedrückten. Dann kannst du die Bilder vertauschen.
Ciao
DosCoder
 
Entweder du vergibst jeden Button ne ID (z. B. in dem du es in ein Array oder List einträgst und in einer Schleife die beiden durchrennst bis der Button == oder equal (== vergleicht Referenzen, equal quasi den Inhalt (gerade nicht den Source zum nachsehen ob Inhalt, HashSum oder was auch immer installiert), == sollte warscheinlich auch funktionieren aber musst du schauen ob wirklich beim Source die selbe Referenz rauskommt) dem Source oder du überschreibst gleich JButton und speicherst die ID intern in einer Klassenvariable. Du könntest auch den JButton direkt speichern, aber dann hilft dir das Wohl nur, wenn du JButton überschreibst.

Je mehr Wege nach Rom führen, umso kreativer kann man in der Routenplanung sein, solange sie jemand nachvollziehen kann.

Aber ehrlich gesagt habe ich (ohne dir was zu unterstellen zu wollen) das Gefühl, dass du dir das Programm aus verschiedenen Beispielsources zusammenflicken willst. Zwar habe ich jede Programmiersprache bisher so gelernt (mit Tutorials kann ich erst ab einer gewissen Grundkenntniss etwas anfangen), aber ich denke, dass das wohl einer der schlechtesten Wege ist eine Sprache zu lernen.
 
Ich habe die Code so geschrieben:

public void actionPerformed(ActionEvent e) {
// if buttton1 und button2 gedrückt, wechselt sich ihre Positionen.
JButton button = (JButton) e.getSource();
Dimension size = button.getSize();
int pos = new int[][] {{0,1,2}, {3,4,5}, {6,7,8}, {9,10,11} };

int buttonX = button0.getX();
int buttonY = button0.getY();
int button_X = button_0.getX();
int button_Y = button_0.getY();
int buttonPosX= buttonX / size.width;
int buttonPosY= buttonY / size.height;
int buttonIndex = pos[buttonPosY][buttonPosX];

int buttonPos_X= button_X / size.width;
int buttonPos_Y= button_Y / size.height;
int button_Index = pos[buttonPos_Y][buttonPos_X];


boolean isSet = false;

if (button0 == e.getSource() ) {

System.out.println("button0 succesfull pressed");

if (button_0 == e.getSource() && isSet==false) {
panel1.add(button_0, buttonIndex);
panel2.add(button0, button_Index);
panel1.validate();
panel2.validate();
isSet = true;
System.out.println("button_0 succesfull pressed");
}

}




}

Aber es führt nur bis if (button0 == e.getSource() aus, dene zweiten Klickt auf button_0 wird nicht ausgeführt..

Ich bitte noch um Hilfe, wie ich das Problem löse: (Klickt auf button1 und danach Klickt auf button_1 danach wird den Code ausgeführt)
 
Warscheinlich, weil button0 und button_0 nicht auf die selbe Instance verweißt. Du solltest dringend auf bessere Variablennamen umsteigen. Am einfachsten ginge es wohl in einen Array. Oder du überschreibst JButton, speicherst in der Instance die Koordinaten oder ähnliches, castest den Source runter auf die überschriebene Klasse und hohlst dir aus den Getter die Koordinaten..
 
Hi,
es geht doch viel einfacher:
Java:
public void actionPerformed(...){
   if(savedButton == null){
    savedButton = (JButton)e.getSource();
   }else{
    ImageIcon iconSaved = savedButton.getIcon();
    ImageIcon iconNew = (JButton)e.getSource();
    ((JButton)e.getSource).setIcon(icon)
    savedBbutton.setIcon(((JButton)e.getSource()).getIcon());
    savedButton = null;
   }
}

Der Quellcode ist etwas vereinfacht und nicht getestet, aber er könnte helfen. ;)
Ciao
DosCoder
 

Neue Beiträge

Zurück