Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
So also ich bin totaler Neuling und da ich bei google und mit der SuFu nichts gefunden habe und auch leider keine Ahnung habe wie ich dieses "Problem" lösen soll werde ich euch mal diese "Frage" stellen :wink:
Also ich und mein Freund versuchen ein kleines Spiel welches wir mal aus langeweile mit "Winlogo" geschrieben haben, jetzt in Java zu schreiben.
Nun wollen wir einige Bilder machen (vll. auch gif aber erstmal JPG) und diese dann in das Spiel einzufügen.
Wir haben JDialog genommen um alles in einem Fenster darzustellen und nun wollen wir in das Fenster etwas weiter unten ein "Bild" einfügen.
Leider habe ich keine Ahnung wie man so etwas mit Netbeans in dem JDialog macht... könnt ihr mir da weiterhelfen?
Also ich und Bhui wollen, während wir dieses Spiel schrieben ein wenig Java lernen.
Wir haben uns einen Code gesucht, der ein Fenster mit einer Eingabe öffnet usw.
Dann haben wir das ganze so verändert, dass es zu dem kleinen Tamagotchiartigen Spiel passt, dass wir schireben wollen.
Also ich werde jetzt den entsprechenden Teild es Codes hier einfügen und ncih wundern wenn es sehr umständlich geschireben ist (wie gesagt, eigneltich können wir kein Java).
Code:
public static void main( String[] args )
{
//Hauptfenster
TextEinAusgabe2 meinFenster = new TextEinAusgabe2( "MyAnimal" );
meinFenster.setSize( 500, 90 );
meinFenster.setVisible( true );
}
public TextEinAusgabe2( String MyAnimal )
{
super( MyAnimal );
//label ist deaktiviert
Label hinweis = new Label( "Bestaetige deine Eingabe mit Enter." );
eingabe = new TextField();
ausgabe = new Label();
ausgabe2= new Label();
//zufallsfarben
zufall();
if (zz<20) {setBackground(Color.yellow);
if (zz>10) {setForeground(Color.black);} //Schwarz auf Gelb
else {setForeground(Color.blue);} //Blau auf Gelb
}
if (zz<=40&&zz>=20) {setBackground(Color.blue);
if (zz>10) {setForeground(Color.yellow);} //Gelb auf Blau
else {setForeground(Color.orange);} //Orange auf Blau
}
if (zz>40&&zz<=60) {setBackground(Color.orange);
if (zz>10) {setForeground(Color.green);} //Gruen auf Orange
else {setForeground(Color.black);} //Schwarz auf Orange
}
if (zz>60&&zz<=80) {setBackground(Color.green);
if (zz>10) {setForeground(Color.yellow);} //Gelb auf Gruen
else {setForeground(Color.red);} //Rot auf Gruen
}
if (zz>80) {setBackground(Color.red);
if (zz>10) {setForeground(Color.black);} //Schwarz auf Rot
else {setForeground(Color.blue);} //Blau auf Rot
}
setResizable( false ) ;
//postition
Dimension d = Toolkit.getDefaultToolkit(). getScreenSize() ;
setLocation(
(d.width-500)/2 ,(d.height-80)/2 );
add( BorderLayout.NORTH, ausgabe );
add( BorderLayout.CENTER, ausgabe2);
add( BorderLayout.SOUTH, eingabe );
ausgabe.setText( "Gib einen Namen ein" );
eingabe.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent ev ) {
if (givename==0){name=eingabe.getText(); givename++;
ausgabe.setText( "Dein Animal heisst nun " + name + "." ); eingabe.setText ("");
}
else {meineMethode(); }
} } );
addWindowListener(
new WindowAdapter() {
@Override
public void windowClosing( WindowEvent ev ) {
dispose();
System.exit( 0 ); } } );
}
Also es öffent sich ein fenster mit "ausgabe" , "ausgabe2" und "eingabe" .
über "ausgabe" soll nun ein Bild.
Wir haben alle "methoden" in eine klasse geschireben, da wir mit mehreren nciht umgehen können xD
Noch eine Möglichkeit wäre, ein ganz neues Fenster mit einem bild aufzurufen.
eine bedingung ist, dass das Bild aus der anderen klasse heraus geändert werden können soll^^
Also am bestne wäre es wenn es iwie eine klasse gibt, die ein fenster mit einem bild drin aufruft und die man dann aus einer anderen klasse heraus starten kan indem man dann "klasse (bildURL)" eingibt.
Falls jeman Zeit und langeweile hat kann er ja mal versuchen uns zu Helfen.
die struktur ist ungefähr so:
Also nochmal zusammengefasst was wir bräcuhten:
Eine klasse zum aufrufen eines fensters welches in diesem fall das "testbild.jpg" anzeigt.
Das bild soll aus der "texteinausgabe2.java" klasse heraus geändert/aktualisiert werden können
Guten Tag
Habe die letzte Zeit viel, viel herumprobiert und habe schließlich folgendes
zusammengebastelt (aus fertigen Codes, die ich entsprechend verändert habe).
Code:
class animation extends JPanel {
private JFrame frame;
BufferedImage h, eins, zwei;
BufferedImage feld[];
private int pictureToPaint = 1;
public animation(BufferedImage eins, BufferedImage zwei) {
h = loadPics("bilder/bild3.jpg"); //Hintergrundbild (nicht sichtbar)
feld = new BufferedImage[3];
feld[0] = eins;
feld[1] = zwei;
feld[2] = h;
this.setPreferredSize(new Dimension(400, 400));
Dimension resolution = Toolkit.getDefaultToolkit().getScreenSize();
frame = new JFrame();
frame.setResizable(false);
frame.setLocation((resolution.width-400)/2 ,0);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.add(this);
frame.pack();
frame.setVisible(true);
aniZeichnen();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(feld[pictureToPaint], 0, 0, this);
}
private BufferedImage loadPics(String path) {
BufferedImage source = null;
URL pic_url = getClass().getClassLoader().getResource(path);
try {
source = ImageIO.read(pic_url);
} catch (IOException e) {
e.printStackTrace();
}
return source.getSubimage(0, 0, source.getWidth(), source.getHeight());
}
public void aniZeichnen() {
Runnable r = new Runnable() {
public void run() {
for (int i = 0; i < 12; i++) {
System.out.println("i: " + i);
pictureToPaint = (i % 2);
try {
Thread.sleep(400);
} catch (InterruptedException e) {
e.printStackTrace();
}
repaint();
} frame.dispose();
}
};
new Thread(r).start();
}
}
Von einer anderen Klasse aus
das Fenster, welches die Animation
( 2 Bilder ; Auflösung 400*400px ;11 Bildwechsel)
anzeigt und sich dannach wieder schließt,
aufrufen kann man wie folgt:
Code:
eins = loadPics("bilder/bild1.jpg");
zwei = loadPics("bilder/bild2.jpg");
new animation(eins, zwei);
Vielen Dank für eure Hilfe
PS:
Anzumerken sei hier noch,
dass ich die Methode "loadPics" nochmal in die Klasse kopiert habe,
von welcher aus ich die Animation aufrufe. Und in eben der selben Klasse nochmal
Code:
BufferedImage h, eins, zwei;
deklariert habe.
Wahrscheinlich ist diese Lösung sehr kompliziert und unübersichtlich,
doch besser habe ich es nicht hinbekommen.