Hallo zusammen,
bevor ich genauer auf das Problem eingehe, die paintComponent ist in einer anderen Klasse ausgelagert wovon geerbt wird. Bei einem anderen Programm funktioniert diese Arbeitsweise mit der paintComponent. Allerdings ist diese jetzt ja wie gesagt ausgelagert.
Ich habe daher in der Unterklasse noch einmal ImageIcon integriert um das Bild, wie bei den anderen Programmen auch, laden zu können...
Ich habe jetzt einige Varianten durchprobiert, aber es wollen einfach keine Bilder angezeigt werden... :-(
Kann mir evtl. jemand sagen, in welcher Zeile ich den Befehl zum Laden des Bildes einpflegen muss?
Ich verwende folgende Befehle: ImageIcon img=new ImageIcon; Image bild=img.getImage();
Hier der Code Klasse1:
[/code]
Und hier der Code der zweiten Klasse:
[/code]
Ich weiß echt nicht, wo ich hier noch etwas ändern soll...
Bei Bedarf kann ich noch den Code eines anderen funktionierenden Programmes posten, der im Prinzip das Selbe bewirken soll... bis auf die Zeit Einstellungen.
Lg
bevor ich genauer auf das Problem eingehe, die paintComponent ist in einer anderen Klasse ausgelagert wovon geerbt wird. Bei einem anderen Programm funktioniert diese Arbeitsweise mit der paintComponent. Allerdings ist diese jetzt ja wie gesagt ausgelagert.
Ich habe daher in der Unterklasse noch einmal ImageIcon integriert um das Bild, wie bei den anderen Programmen auch, laden zu können...
Ich habe jetzt einige Varianten durchprobiert, aber es wollen einfach keine Bilder angezeigt werden... :-(
Kann mir evtl. jemand sagen, in welcher Zeile ich den Befehl zum Laden des Bildes einpflegen muss?
Ich verwende folgende Befehle: ImageIcon img=new ImageIcon; Image bild=img.getImage();
Hier der Code Klasse1:
Java:
[code]
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
class Uebung9_2_erweitert extends JFrame
{
private static final long serialVersionUID = 1L;
private Image bild;
int count;
Uebung9_2_erweitert f2;
public Uebung9_2_erweitert()
{
ImageIcon imageicon= new ImageIcon("Bewerbungsfoto.jpeg");
bild=imageicon.getImage();
}
final private int random1()
{
return (int)(Math.random()*3);
}
final private int random()
{
return (int)(Math.random()*256);
}
public void paint(Graphics gr)
{
count=0;//in ihr werden zwei schleifen aufgerufen, die erste fuehrt die x achse entlang
gr.setColor(Color.WHITE);
gr.fillRect(0, 0, 400, 300);
for(int x=20;x<getSize().width-25;x=x+40)
{ //die zweite fuehrt die y achse entlang
for(int y=40;y<getSize().height-25;y=y+40)
{ //die variable ran wird mit random1 initialisiert
int ran=random1();
if(ran==0)
{
gr.setColor(Color.RED);
}
else if(ran==1)
{
gr.setColor(Color.BLUE);
}
else if(ran==2)
{
gr.setColor(Color.GREEN);
}
//
if(ran==3)
{
gr.drawImage(bild, x, y, 30, 30, this);
count=count+1;
}
else
gr.fillRect(x, y, 30, 30);
int r=random(),g=random(),b=random();
gr.setColor(new Color(r,g,b));
gr.drawOval(x, y, 30, 30);
count++;
}
}
}
public void start(int wahl)
{
double step=100*((wahl+1)/2.0+0.5);
Dimension d=Toolkit.getDefaultToolkit().getScreenSize();
for(double i=0, j=0;i<(d.width-getSize().width);i=i+((d.width-getSize().width)/step),j=j+((d.height-30-getSize().height)/step))
{
try
{
Thread.sleep(10);
setLocation((int)i,(int)j);
}catch(InterruptedException ie){}
}
int num=f2.count;
repaint();
String eingabe=JOptionPane.showInputDialog("Wie viele Bilder waren im Feld?");
int zahl=Integer.parseInt(eingabe);
if(zahl!=num)
{
System.out.println("falsch, es waren: "+num);
}
else
System.out.println("richtig, es waren: "+num);
System.exit(0);
}
}
Und hier der Code der zweiten Klasse:
Java:
[code]
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
//F-Variante
class A11 extends JFrame
{
private static final long serialVersionUID = 1L;
private Image bild;
int number;
public A11(){
setSize(310,330);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ImageIcon imageicon = new ImageIcon("logo.jpg");
bild = imageicon.getImage();
}
final private int random1(){
return (int)(Math.random()*4);
}
final private int random(){
return (int)(Math.random()*256);
}
public void paint(Graphics gr){
number = 0;
gr.setColor(Color.WHITE);
gr.fillRect(0,0,310,330);
for(int x = 20; x < getSize().width - 25; x = x+40)
for (int y = 40; y < getSize().height-25;y = y+40){
int ran = random1();
if (ran == 0)
gr.setColor(Color.RED);
else if (ran == 1)
gr.setColor(Color.BLUE);
else if (ran ==2)
gr.setColor(Color.GREEN);
if (ran == 3){
gr.drawImage(bild,x,y,30,30,this);
number = number +1;
}
else gr.fillRect(x,y,30,30);
int r = random(), g = random(), b = random();
gr.setColor(new Color(r,g,b));
gr.drawOval(x,y,30,30);
}
}
public void start(int wahl){
//wahl hat die Werte 0,1, 2, ..., 8
double step = 100*((wahl+1)/2.0 + 0.5);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
for(double i=0, j=0;i<(d.width-getSize().width); i = i + ((d.width-getSize().width)/step), j = j + ((d.height-30-getSize().height)/step)){
try{
Thread.sleep(10);
}catch (InterruptedException e){}
setLocation((int)i,(int)j);
}
int num = number;
repaint();
String eingabe = JOptionPane.showInputDialog("Wieviele Bilder waren im Feld?");
int zahl = Integer.parseInt(eingabe);
if (zahl == num)
JOptionPane.showMessageDialog(null, "Richtig!","Ergebnis",JOptionPane.INFORMATION_MESSAGE);
else JOptionPane.showMessageDialog(null, "Falsch! Es waren "+ num + ".","Ergebnis",JOptionPane.WARNING_MESSAGE);
System.exit(0);
}
}
public class Auswahl extends JFrame implements ActionListener
{
private static final long serialVersionUID = 1L;
private JComboBox<Double> zeitWahl = new JComboBox<Double>();
private JButton startButton;
private A11 spiel = new A11();
private int druecken = 0;
private Image bild;
public Auswahl()
{
setzeKomponenten();
pack();
setLocation(0,350);
setVisible(true);
}
/*
//schlechte Variante
public void actionPerformed(ActionEvent evt){
druecken++;
spiel.setVisible(true);
if (druecken == 2)
spiel.start(zeitWahl.getSelectedIndex());
}
*/
//F-Variante
public void actionPerformed(ActionEvent evt)
{
Runnable bewegung = new Runnable(){
public void run(){
spiel.start(zeitWahl.getSelectedIndex());
}
};
spiel.setVisible(true);
SwingUtilities.invokeLater(bewegung);
}
public void setzeKomponenten()
{
ImageIcon img=new ImageIcon("Bewerbungsfoto.jpeg");
bild=img.getImage();
for(double i = 1; i <= 5; i = i + 0.5)
zeitWahl.addItem(i);
getContentPane().add(new JLabel(" Eingabe der Zeit in Sekunden: "), BorderLayout.NORTH);
getContentPane().add(zeitWahl, BorderLayout.CENTER);
startButton = new JButton("Start"); //F-Version
//startButton = new JButton("Start mit Doppelklick"); //schlechte Variante
getContentPane().add(startButton, BorderLayout.SOUTH);
startButton.addActionListener(this);
}
public static void main(String[] args){
new Auswahl();
}
}
Ich weiß echt nicht, wo ich hier noch etwas ändern soll...
Bei Bedarf kann ich noch den Code eines anderen funktionierenden Programmes posten, der im Prinzip das Selbe bewirken soll... bis auf die Zeit Einstellungen.
Lg