Hoy Leute,
erstmals ein großes Hallo an alle, hab zwar schon oft hier in den Threads herumgestöbert und allerhand Interessantes und Nützliches gefunden, aber mich noch nicht hier angemeldet, da ich eigentlich noch eine Stufe unter "Anfänger" war. Naja, nun habe ich ein Semester lang Java genossen und kann mich nun zu den "Anfängern mitzählen :wink:
Da ich ja an einer Uni bin, muss ich nun auch in dem Fach an einer Seminararbeit mitwirken und an dieser sitze ich nun scon seit geraumer Zeit und irgendwie erscheint mir meine Aufgabenstellung wie "Böhmische Dörfer" und deshalb wende ich mich nun an Euch, mit der großen Bitte mir ein bißchen unter die Arme zu greifen, da ich echt nimmer weiter weiß!
So, falls sich nun jemand entschließen sollte, mir zu helfen, hier die Aufgabe und weiter unten dann meine Aufgabenstellung:
Aufgabe
Erstellung eines Slide-Puzzles, bei dem man selber die Anzahl der Reihen und Spalten einstellen kann mit der das Bild geteilt wird, desweiteren sollen die Teile per Mausklick austauschbar sein, d.h., wenn man ein Teil anklickt und dann das nächste, dann soll die Position der Teile miteinander getauscht werden. Dies alles soll als Applet dann auf eine HTML Seite dargestellt werden.
Meine Aufgabe
Ich soll den Benutzerdialog erstellen, d.h. die Auswahl der Bildausschnitte und zusätzlich sollen dann die Bildauschnitte, die per Mausklick ausgewählt werden, mit einem Rahmen umlegt werden, damit man sieht, welche Bildausschnitte man ausgewählt hat. Das Austauschen der beiden Bildteile übernimmt dann eine Kollege.
AblauF
Erster Mausklick
Rahmen um ausgewählten Bildausschnitt machen
Container-Position des Bildausschnitts herausfinden und in eine Variable schreiben, damit diese Variable dann an die Tauschfunktion weitergegeben werden kann
Zweiter Mausklick
wieder Rahmen um ausgewählten Bildauschnitt
wieder Container-Position des Bildausschnitts herausfinden und in eine Variable schreiben, damit diese Variable dann an die Tauschfunktion weitergegeben werden kann
So und hier ist der Code, der bisher von uns entwickelt wurde:
Es wäre wirklich supercool, wenn mir da jemand weiterhelfen könnte, wie ich das zu Ende bekomme, da ich absolut nimmer weiter weiß!
Derjenige, der das hinbekommt, bekommt von mir mein Carepaket, das mir meine Oma geschickt hat, das sind 4 Packungen Haribo Goldbären und ne Riesentafel Milka, zugeschickt
Nüüü denn, schonmal 1000 Dank im voraus für eure Hilfe
erstmals ein großes Hallo an alle, hab zwar schon oft hier in den Threads herumgestöbert und allerhand Interessantes und Nützliches gefunden, aber mich noch nicht hier angemeldet, da ich eigentlich noch eine Stufe unter "Anfänger" war. Naja, nun habe ich ein Semester lang Java genossen und kann mich nun zu den "Anfängern mitzählen :wink:
Da ich ja an einer Uni bin, muss ich nun auch in dem Fach an einer Seminararbeit mitwirken und an dieser sitze ich nun scon seit geraumer Zeit und irgendwie erscheint mir meine Aufgabenstellung wie "Böhmische Dörfer" und deshalb wende ich mich nun an Euch, mit der großen Bitte mir ein bißchen unter die Arme zu greifen, da ich echt nimmer weiter weiß!
So, falls sich nun jemand entschließen sollte, mir zu helfen, hier die Aufgabe und weiter unten dann meine Aufgabenstellung:
Aufgabe
Erstellung eines Slide-Puzzles, bei dem man selber die Anzahl der Reihen und Spalten einstellen kann mit der das Bild geteilt wird, desweiteren sollen die Teile per Mausklick austauschbar sein, d.h., wenn man ein Teil anklickt und dann das nächste, dann soll die Position der Teile miteinander getauscht werden. Dies alles soll als Applet dann auf eine HTML Seite dargestellt werden.
Meine Aufgabe
Ich soll den Benutzerdialog erstellen, d.h. die Auswahl der Bildausschnitte und zusätzlich sollen dann die Bildauschnitte, die per Mausklick ausgewählt werden, mit einem Rahmen umlegt werden, damit man sieht, welche Bildausschnitte man ausgewählt hat. Das Austauschen der beiden Bildteile übernimmt dann eine Kollege.
AblauF
Erster Mausklick
Rahmen um ausgewählten Bildausschnitt machen
Container-Position des Bildausschnitts herausfinden und in eine Variable schreiben, damit diese Variable dann an die Tauschfunktion weitergegeben werden kann
Zweiter Mausklick
wieder Rahmen um ausgewählten Bildauschnitt
wieder Container-Position des Bildausschnitts herausfinden und in eine Variable schreiben, damit diese Variable dann an die Tauschfunktion weitergegeben werden kann
So und hier ist der Code, der bisher von uns entwickelt wurde:
Code:
/**
* Bildausschnitt-Anzeige
*
*/
import java.awt.*;
import java.awt.image.*;
public class ImageDisplayedDetail extends ImageViewer
{
private Dimension Size;
int breite, hoehe;
ImageDisplayedDetail(ImageProducer source, int x, int y, int width, int height)
{
// construct base class
super(new FilteredImageSource(source, new CropImageFilter(x,y,width,height) ));
// store size of detail
Size = new Dimension(width, height);
breite = width; // für die Breite des Highlights
hoehe = height; // für die Höhe des Highlights
}
public Dimension getPreferredSize()
{
return new Dimension(Size);
}
/**
* Das habe ich gemacht um einen Rahmen für den Bildausschnitt zu erhalten
*
*/
public boolean highlight (boolean status) // für Rahmen bei Auswahl
{
Graphics g = getGraphics(); // hier wird Graphics g implementiert
if (status = true) // wenn Status auf True ...
g.drawRect(0, 0, breite-1, hoehe-1); // Rahmenblablab
return true;
}
}
Code:
/**
* hier werden dann die Puzzleteile zusammengesetzt
*
*/
import java.awt.*;
import java.awt.image.*;
import java.awt.event.MouseAdapter; //für Mouseadapter
import java.awt.event.MouseEvent; // für Mouseevent
public class ImageMatrix extends Panel
{
private int Rows, Cols; // rows and columnes of matrix
private ImageDisplayedDetail[][] ImgDetail; // array of details
private Dimension Size; // size of orign
ImageMatrix(ImageProducer img, int rows, int cols)
{
Rows = rows;
Cols = cols;
ImgDetail = new ImageDisplayedDetail[Rows][Cols];
// Ermittle orig. Größe
ImageViewer orig = new ImageViewer(img);
Size = orig.getPreferredSize();
// System.out.println(Size);
// Grid Layout
setLayout(new GridLayout(Rows,Cols));
// Größe des Teilbildes
int dx = Size.width / Cols, dy = Size.height / Rows;
// Anlegen der Matrix
for (int i=0; i<Rows; i++)
{
for (int j=0; j<Cols; j++)
{
ImgDetail[i][j] = new ImageDisplayedDetail(img, j*dx, i*dy, dx, dy );
}
}
for (int j=0; j<Cols; j++)
for (int i=0; i<Rows; i++)
add(ImgDetail[i][j]);
// Kontrolle
System.out.println("Orig: " + Size);
System.out.println("Matrix: " + getPreferredSize());
System.out.println("Detail: " + ImgDetail[0][0].getPreferredSize());
}
/**
* Mein Teil
* Das habe ich bis jetzt gemacht um den Mausklick auszuwerten
* und wo ich absolut nimmer weiterweiß, was ich machen soll
* hier sollte die Aktion stehen mit dem Mouseklick
*/
class MeinMausklick extends MouseAdapter
{
int x, y;
MeinMausklick (int z, int u)
{
x = z;
y = u;
}
public void mouseClicked (MouseEvent e)
{
if (e.getClickCount() <= 1) //für 1. Klick
{
// für 1. Containerwert
Component component = getComponent(x);
System.out.println("X ist: " +x);
highlight.status = true;
}
else if (e.getClickCount() > 1) // für 2. Klick
{
int y; // für 2. Containerwert
}
}
}
// public Dimension getPreferredSize()
// {
// return new Dimension(450,450);
// }
}
Code:
/**ImageViewer
*
*
*
*/
import java.awt.*;
import java.awt.image.*;
public class ImageViewer extends Canvas
{
private Image bild;
int breite, hoehe;
ImageViewer(ImageProducer img)
{
breite = -1;
hoehe = -1;
bild = createImage(img);
// warteAufBildgroesse();
}
public void paint(Graphics g)
{
g.drawImage(bild, 0, 0, this);
g.drawRect(0, 0, breite-1, hoehe-1);
}
public Dimension getPreferredSize()
{
if(breite == -1 || hoehe == -1)
warteAufBildgroesse();
return new Dimension(breite, hoehe);
}
private void warteAufBildgroesse()
{
prepareImage(bild, this);
while(true)
{
int status = checkImage(bild, this);
if ((status & ImageObserver.WIDTH) != 0 && (status & ImageObserver.HEIGHT) != 0)
break;
try
{
Thread.sleep(10);
} catch (InterruptedException ign)
{
}
}
breite = bild.getWidth(this);
hoehe = bild.getHeight(this);
}
}
Code:
/**
* Applet zur Anzeige eines ImageViewer
*
*
*
*
*/
import java.awt.*;
import java.awt.image.*;
import java.applet.Applet;
public class Puzzle extends Applet
{
public final int Zeilen = 4, Spalten = 4;
public void init()
{
// 1. Öffnen eines ImageProducers
Image orig = getImage(getCodeBase(), "images/test.gif");
// 2. hole aus dem Image den zugehörigen Producer
ImageProducer origProd = orig.getSource();
// 3. geneiere Bild-Matrix
ImageMatrix mat = new ImageMatrix(origProd, Zeilen, Spalten);
add(mat);
}
}
Es wäre wirklich supercool, wenn mir da jemand weiterhelfen könnte, wie ich das zu Ende bekomme, da ich absolut nimmer weiter weiß!
Derjenige, der das hinbekommt, bekommt von mir mein Carepaket, das mir meine Oma geschickt hat, das sind 4 Packungen Haribo Goldbären und ne Riesentafel Milka, zugeschickt
Nüüü denn, schonmal 1000 Dank im voraus für eure Hilfe