Hallo allerseits.
Ich bin gerade dabei einen Programmierbeleg zu erstellen. Dabei handelt es sich um ein Schieberätsel.
Das Rätsel funktioniert auch, doch habe ich nun noch einige kleine Probleme. Das wichtigste zuerst:
Ich habe eine Bildergalerie, die die Bilder im Ordner Images anzeigt.
Wenn ich die Klasse direkt aufrufe mit ihrer eigenen mainMethode, dann werden mir die Bilder auch angezeigt. Wenn ich aber die Klasse über meine Hauptklasse aufrufe, werden die Bilder nur kurz gezeichnet und dann verschwinden sie oder werden überzeichnet. Aber die Labels unter den Bildern bleiben erhalten.
Ich habe die Vermutung das es etwas mit Repaint zu tun hat.
Die Galerie wird durch den Button Ok im Abfragefenster aufgerufen. Befindet sich in "EingabeStr".
Die Hauptklasse ist noch etwas durcheinander, da sie eigentlich mal größer war, und ich einige Teile ausgelagert habe.
Ich bin gerade dabei einen Programmierbeleg zu erstellen. Dabei handelt es sich um ein Schieberätsel.
Das Rätsel funktioniert auch, doch habe ich nun noch einige kleine Probleme. Das wichtigste zuerst:
Ich habe eine Bildergalerie, die die Bilder im Ordner Images anzeigt.
Wenn ich die Klasse direkt aufrufe mit ihrer eigenen mainMethode, dann werden mir die Bilder auch angezeigt. Wenn ich aber die Klasse über meine Hauptklasse aufrufe, werden die Bilder nur kurz gezeichnet und dann verschwinden sie oder werden überzeichnet. Aber die Labels unter den Bildern bleiben erhalten.
Ich habe die Vermutung das es etwas mit Repaint zu tun hat.
Die Galerie wird durch den Button Ok im Abfragefenster aufgerufen. Befindet sich in "EingabeStr".
Java:
class Galerie extends Frame{
public static void main(String args[]){
try {
new Galerie();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Galerie(){
try{
setSize(300, 300);
setLocation(200, 200);
setResizable(false);
setLayout(new BorderLayout());
setBackground(Color.WHITE);
setTitle("Bild aus Galerie wählen:");
//fügt ein Panel am unteren Rand ein
Panel knopfPanel = new Panel();
add(knopfPanel, "South");
knopfPanel.setBackground(Color.LIGHT_GRAY);
//fügt ein Label am unteren Rand auf dem Panel ein
Label frage2 = new Label("oder Bild hochladen:");
knopfPanel.add(frage2);
//Fügt einen Button auf das Panel
Button ladeButton = new Button(" Bild laden ");
knopfPanel.add(ladeButton);
ladeButton.addActionListener(new ladenStrg(this));
addWindowListener(new FensterSchliesser(this));
setVisible(true);}catch(Exception e){System.out.println("Es ist ein Fehler im Fenster aufgetreten");}
ordnerLesen();
}
void fensterSchliesser(){
dispose();
System.exit(0);
}
class FensterSchliesser extends WindowAdapter{
private Galerie frame;
public FensterSchliesser(Galerie f) {
frame = f;
}
public void windowClosing(WindowEvent e) {
frame.fensterSchliesser(); //methode zum schlie�en
}
}
//Beobachter-Klasse für "ladeBild" Schaltfläche
class ladenStrg implements ActionListener {
private Galerie frame;
public ladenStrg(Galerie f){
frame = f;
}
public void actionPerformed(ActionEvent e) {
try {
new Puzzle.OeffnenDialog();
//String path = Puzzle.OeffnenDialog.inputVerzStr;
//new Puzzle.PuzzleFenster(path);
} catch(Exception e1) {
System.out.println("Es ist ein Fehler in ladenStrg aufgetreten");
}
}
}
public void ordnerLesen(){
try{
File[] filenames = new File[10];
File file = new File(".\\Images"); //liest Ordner Images ein
filenames = file.listFiles(); //speichert die dateien in einem array
int x=10;
int y=10;
for (int i = 0; i < filenames.length; ++i) {
File f = new File(filenames[i].toString()); //erstellt für jede Datei eine File
BufferedImage[] im= new BufferedImage[10];
try {
im[i] = ImageIO.read(f); //liest Bilder
paint(im[i],x,y,f); //zeichnet Bilder
x= x+90;
if(x>=270){
y=y+80;
x=10;
}
}catch(IOException e1){System.out.println("Es ist ein Fehler beim lesen der Bilder aufgetreten");}
}
}catch(Exception e){System.out.println("Es ist ein Fehler in ordnerLesen aufgetreten");}
}
public String paint(BufferedImage b, int x, int y, File f){
int width = 80;
int height = 60;
Image im = b;
Graphics g= this.getGraphics();
Label[] lab = new Label[100];
int i = 0;
String path = f.toString();
int startName = path.lastIndexOf("\\");
int endName = path.lastIndexOf(".");
String name = path.substring(startName, endName);
try{
lab[i] = new Label(path);
lab[i].setText(name);
lab[i].setLocation(x,y+60);
lab[i].setSize(80,10);
lab[i].setVisible(true);
lab[i].addMouseListener(new BildStrg(path));
add(lab[i]);
System.out.println(lab[i]);
g.drawImage(im, x, y, width, height, this);
i++;
}catch(Exception e){System.out.println("Fehler");}
return path;
}
class BildStrg implements MouseListener{
String path;
public BildStrg(String s){
path = s;
}
public void mouseClicked(MouseEvent e){
int ClickedCount = e.getClickCount();
if(ClickedCount > 0){
System.out.println(path);
try {
//this.puzzle.zeichneBild(path);
//new Puzzle.PuzzleFenster(path);
new paintTest(path);
setVisible(false);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}}
Java:
//Hauptklasse
public class Puzzle extends Frame{
static int n =0; //Anzahl der Spielfelder
public static void main(String[] args){
try{
AbfrageFenster puz = new AbfrageFenster();
}catch(Exception e3){System.out.println("Es ist ein Fehler in der mainMethode");}
}
//Methode zur ermittlung des Wertes für die Anzahl der Spielfelder
public static int wert(){
String s = AbfrageFenster.eingabe.getText(); //liest text aus dem abfragefeld
n = Integer.parseInt(s); //wandelt von String zu int
System.out.println(n);
return n;
}
//Abfragefenster bei Wahl eines neuen Spiels.
static class AbfrageFenster extends Frame{
static TextField eingabe;
Label frage;
Button ok;
public AbfrageFenster() throws Exception{
try{
//Bauen des Fensters
setSize(100, 100);
setLocation(600, 600);
setResizable(false);
setLayout(new BorderLayout());
setBackground(Color.WHITE);
//Label und textfeld Größenfeststellung
frage = new Label("Anzahl Spielsteine (x/x):");
add(frage, BorderLayout.NORTH);
eingabe = new TextField();
eingabe.setEditable(true);
add(eingabe, BorderLayout.CENTER);
// Knopf zum Bestätigen und schließen des fensters
ok = new Button(" OK ");
add(ok, BorderLayout.SOUTH);
ok.addActionListener(new EingabeStrg(this));
addWindowListener(new FensterSchliesserAbfrage(this)); //Zum schlie�en des Fensters �ber das X
setVisible(true); //sichtbar machen
}catch (Exception e){System.out.println("Es ist ein Fehler im Abfragefenster aufgetreten)");}
}
void fensterSchliesser(){
dispose();
System.exit(0);
}
class FensterSchliesserAbfrage extends WindowAdapter{
private AbfrageFenster abfrage;
public FensterSchliesserAbfrage(AbfrageFenster ab) {
abfrage = ab;
}
public void windowClosing(WindowEvent e) {
abfrage.fensterSchliesser();
}
}
//Klasse zur Steuerung des OK-Buttons
class EingabeStrg implements ActionListener {
private AbfrageFenster frame;
public EingabeStrg(AbfrageFenster ab) {
frame = ab;
}
public void actionPerformed(ActionEvent e) {
try{
if((wert()>10)||(wert()<3)){
AbfrageFenster.eingabe.setText("Bitte Zahl zwischen 3 und 10 eingeben");
}
n= wert(); //liest wert aus
new Galerie(); //öffnet die Bildergalerie
frame.setVisible(false); //wird unsichtbar da schließen sonst alles schließt
}catch(Exception e2){System.out.println("Es ist ein Fehler in EingabeStrg aufgetreten");}
}
}
}
//Klasse zum öffnen eines Dateiauswahl-Fensters.
public static class OeffnenDialog {
String inputVerzStr;
public OeffnenDialog(){
final JFileChooser chooser = new JFileChooser("Verzeichnis wählen");
chooser.setDialogType(JFileChooser.OPEN_DIALOG);
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); //nimmt einen int-Wert in Form des Feldes FILES_AND_DIRECTORIES entgegen, der bestimmt, dass der Dialog sowohl Verzeichnisse als auch Dateien zeigt.
final File file = new File("/home");
chooser.setCurrentDirectory(file); //legt Ausgangsverzeichnis fest
chooser.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
if (e.getPropertyName().equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)
|| e.getPropertyName().equals(JFileChooser.DIRECTORY_CHANGED_PROPERTY)) {
final File f = (File) e.getNewValue();
}
}
});
chooser.setVisible(true);
final int result = chooser.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
File inputVerzFile = chooser.getSelectedFile();
inputVerzStr = inputVerzFile.getPath();
}else {inputVerzStr=null;
chooser.cancelSelection();}
try {
new paintTest(inputVerzStr);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
Die Hauptklasse ist noch etwas durcheinander, da sie eigentlich mal größer war, und ich einige Teile ausgelagert habe.
Zuletzt bearbeitet von einem Moderator: