Neues Bild bei eingabe bestätigung erscheinen

Krypthor

Aktives Mitglied
Hallo,

ich möchte das wenn ich in ein Textfeld etwas eingebe und dann Enter (oder nen button) drücke,
dass dann ein neues Bild erscheint. Mit Strings und if,else hat das irgendwie nicht geklappt.

Mit freundlichen Grüßen,
Krypthor
 
Hm leider nicht genau das was ich suche, ich möchte ein Wort eingeben. dann soll ein neues Bild erscheinen, aber nicht wenn man das Wort eingibt, sondern erst wenn man einen Button dazu drückt.
 
Nein, es sollen z.B. 2 Bilder da sein, einmal eins wo eine flamme drauf ist und auf dem anderen ein Benzinkanister (für jedes Bild ist dann ein String definiert). Dann soll man in die Texteingabe dann die definierten Wörter angeben also "flamme+benzin" und dann auf einen danebenstehenden Knopf drücken,
worauf ein drittes Bild z.B. von einer Explosion erscheint.

Ich bekomm es nicht hin, dass ein neues Bild erscheint. Das mit dem KeyListener hab ich schon probiert.
Das problem ist da, dass sich void und der string bzw. der eingegebene Text und der String nicht gleichsetzen lassen.
 
du solltest eine klasse machen in der du die bilder lädst. zb:

Java:
class BildPanel extends JPanel
	{
		 
		private static final long serialVersionUID = 1L;
		private BufferedImage img;
	    
	    public BildPanel(String dateiName)
	    {
	        
	        try 
	        {
	            img = ImageIO.read(getClass().getResourceAsStream(dateiName));
	        } 
	        
	        catch (IOException e) 
	        {
	            JOptionPane.showMessageDialog(null, dateiName + " wurde nicht gefunden!");
	        }
	        
	        
	        this.setPreferredSize(new Dimension(img.getWidth(), img.getHeight()));
	      
	        
	    }
	    
	    public void paintComponent(Graphics g){
	        super.paintComponent(g);
	        g.drawImage(img,0,0,null);
	    }
	    
	}

dann solltest du noch eine methode machen inder du ein neuen Jdialog machst und dortdrin das verzeichnis überschreibst
 
Tut mir leid, aber jetzt bin ich ein bisschen durcheinander geraten.

Wo genau muss ich jetzt die Bilder in dem Code einfügen?
Also wenn ich eine neue Class Datei erstelle und dort den Code einfüge, soll ich dann da die "Bilder Vorlagen" erstellen und über Methoden in meiner anderen Class Datei hochladen?
Inwiefern hilft mir das ?


Hier ist sie übrigens mal:
Java:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;



public class Fenster1 extends JFrame {

	  private JTextField field1;
	  ImageIcon img1 = new ImageIcon("flasche.png"); //neues Bild
	  ImageIcon img2 = new ImageIcon("flasche2.jpg"); //neues Bild UNBENUTZT!
      
	  public Fenster1() 
	  {	
		  
		      final JTextField field1 = new JTextField(10);
		  	  field1.setBounds(305,525,150,25);
		  	  
		   	  final JLabel ilabel1 = new JLabel(img1);
		  	  ilabel1.setBounds(50,50,50,50);
		  	  
		  	  setLayout(null);
		  	  setTitle("Fenster");
              add(field1);
              
              setSize(800,600);
              setLocation(300,300);
              setResizable(false);
              setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              setVisible(true);
	 

              final String textinhalt = field1.getText();
              
              field1.addKeyListener(new KeyListener() { 
                  public void keyTyped(KeyEvent e) {}
                  public void keyReleased(KeyEvent e) {}
                  public void keyPressed(KeyEvent e) {
                           int key = e.getKeyCode();
                           
                           //funktioniert noch nicht:
                           String gut = "wasser";  
                           if (key == KeyEvent.VK_ENTER) { 
                           if(sendString(textinhalt) == gut){
                        	   add(ilabel1);
                           }
                 }}
              });
      }

	private void sendString(String textinhalt) {
      
	}
}
 
Zu allererst solltest du mal die Bilder machen die du brauchst (3 wenn ich es richtig verstanden hab) zb mit paint Odr so und unter flamme.jpg oder so was abspeichern.
Dann solltest du die Klasse die ich dir geschickt habe wie eine Methode oder so vor der letzten geschweiften Klammer einfügen. Dann brauchst du noch einen neuen Dialog . Den Code für den schicke ich dir morgen wenn du willst. den Rest erkläre ich dir dann.

Hab ih das so richtig verstanden? Du willst ein JFrame mit einem JtextField und einem Button. Wenn man den Button drückt und im Text Field Flamme steht dann öffnet sich ein neues Fenster in dem ein Bild von einer Flamme kommt. Wenn man Kanister schreibt dann öffnet sich ein Fenster in dem ein Bild von einem Kanister ist. Wenn man Flamme+Kanister schreibt dann öffnet sich ein Fenster indem zuerst eine Flamme dann ein Kanister und dann eine Explosion angezeigt wird? Richtig so?
Jetzt würde ich auf jeden fall erstmal die Bilder machen und abspeichern.


Das problem ist da, dass sich void und der string bzw. der eingegebene Text und der String nicht gleichsetzen lassen.
was meinst du damit?
 
Wenn man den Button drückt und im Text Field Flamme steht dann öffnet sich ein neues Fenster in dem ein Bild von einer Flamme kommt. Wenn man Kanister schreibt dann öffnet sich ein Fenster in dem ein Bild von einem Kanister ist. Wenn man Flamme+Kanister schreibt dann öffnet sich ein Fenster indem zuerst eine Flamme dann ein Kanister und dann eine Explosion angezeigt wird? Richtig so?

Fast richtig. Es sollen sich nur keine neuen Fenster öffnen. Im dem Fenster (wo auch das Textfeld und der Button ist) sind ein paar Standartbilder. Jetzt soll man unten irgendeine Kombination im Textfeld eingeben können, und wenn diese richtig ist, wird ein neues Bild zu den anderen hinzugefügt.

Das problem ist da, dass sich void und der string bzw. der eingegebene Text und der String nicht gleichsetzen lassen.
was meinst du damit?


Damit meinte ich das man ja nicht abfragen kann: "wenn die Eingabe in das Textfeld gleich dem String gut (also "wasser") ist, dann ein Bild hinzufügen" Dies hab ich einmal so direkt probiert:
Java:
String gut = "wasser";
if(field1.getText() == gut){
 add(ilabel1)
}
und einmal über public void wie es in meinem Java Code ist den ich vorhin gepostet habe.
 
Zuletzt bearbeitet:
Eike hat recht mach mal:
Java:
String gut = "wasser";
if(field1.getText().equals(gut){
add(ilabel1)
}
So müsste es gehen.

Was meintest du mit den standartbildern? Als hintergrund oder wie? Sonst mach doch kurz ne Skizze Mit dem textfield und so wo das hin soll und schick sie oder so
 
Naja eigentlich dauert das nicht so lange Aber heute hatte ich nicht viel Zeit und zweitens gab es ein paar Komplikationen mit dem Panel. Würde es dir was ausmachen wenn man einfach die Bilder in einen separaten Dialog macht? Damit hat es nämlich funktioniert. Ich mach mal morgen was ich kann aber vllt wird es auch nur bis zum Montag Abend fertig wenn das ok ist. Ach ja es wäre einfacher wenn du mir die standartbilder und die von der Explosion und so zuschicken könntest oder iwo hochlädst so wie mit der Skizze. Und vllt noch unter welchem Namen du die abgespeichert haben möchtest. Wäre das mit dem separaten Dialog ok? Sonst musst du dich an jemand anderen wenden oder ein bisschen länger warten :/ BTW willst du Anmerkungen am Rand?
 
Wie du das mit dem seperaten Dialog meinst weis ich nicht aber kleine Änderungen sind nicht schlimm.
Anmerkungen am Rand wäre super, allerdings sind die Bilder noch lange nicht fertig und die versuch ich dann selbst einzufügen,
markier mir die Stelle/n mit nem Kommentar oder so. Ich will ja auch was dazulernen 😛
 
Java:
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
 

public class Fenster1 extends JFrame implements ActionListener {
 
  
	private static final long serialVersionUID = 1L;
	JTextField field1;
	static Fenster1 frm;
      final JButton button=new JButton("Kombinieren");
      String textinhalt;
      public Fenster1(String title) 
      { 
          super();
    	  setLayout(new FlowLayout());
          field1= new JTextField(10);
              
          setTitle(title);
          add(field1);
          add(button);
              
          setSize(400,75);
          setLocation(300,300);
          setResizable(false);
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          setVisible(true);
  
          button.addActionListener(this);   //hier wird der button zum actionlistener hinzugefügt damit dieser auf den "button" hört
      }
 
      public void actionPerformed(ActionEvent evt)  //hört auf aktionen
      {
    	  Object obj=evt.getSource();
    	  
    	  if(obj==button)               //wenn der button gedrückt wurde
    	  {
    		  textinhalt = field1.getText();
    		  
    		  if(textinhalt.equals("wasser"))
    		  {
    			  bildanzeigen("wasser.jpg");            //bild muss so abgespeichert worden sein       
    		  }
    		  
    		  if(textinhalt.equals("wasser+feuer"))
    		  {
    			  bildanzeigen("explosion.jpg");
    		  }
    		  
    		  if(textinhalt.equals("feuer"))
    		  {
    			  bildanzeigen("feuer.jpg"); 
    		  }
    	  }
      }
    
    public static void main(String[]args)
    {
    	frm=new Fenster1("Fenster");
    }

    public void bildanzeigen(String verzeichnis)  //hier wird ein neues fenster geöffnet und ein bild dortdrin geladen
    {
    	 JDialog dlg = new JDialog();      //neues fenster mit dem bild
         dlg.add(new BildPanel(verzeichnis));//hier halt deinen Bildtitel angeben
         dlg.pack();
         dlg.setLocationRelativeTo(null);
         dlg.setVisible(true);
    	
    }

    class BildPanel extends JComponent          //das hier ist die klasse mit der du zeichnen kannst
	{
		 
		private static final long serialVersionUID = 1L;
		private BufferedImage img;
	    
	    public BildPanel(String dateiName)
	    {
	        
	        try 
	        {
	            img = ImageIO.read(getClass().getResourceAsStream(dateiName));   //hier wird das verzeichnis geholt und das bild geladen
	        } 
	        
	        catch (IOException e) 
	        {
	            JOptionPane.showMessageDialog(null, dateiName + " wurde nicht gefunden!");  //wenn der dateiname vom bild nicht stimmt
	        }
	        
	        
	        this.setPreferredSize(new Dimension(img.getWidth(), img.getHeight()));
	      
	        
	    }
	    
	    public void paintComponent(Graphics g){
	        super.paintComponent(g);
	        g.drawImage(img,0,0,null); //hiermit wird das bild gemalt
	    }
	    
	}
    
}

das hier oben war der vorläufige code damit du dir ihn schonmal angucken kannst. jedoch wird hier erst mal nur ein bild angezeigt. außerdem solltest du folgende bilder im GLEICHEN ORDNER wie das programm selbst abspeichern:

-wasser.jpg
-explosion.jpg
-feuer.jpg

je nachdem was du eingibst sollte sich dann ein neues fenster öffnen indem das jeweilige bild angezeigt wird. wenn du noch fragen hast oder so einfach mal melden.

PS: ich ändere morgen das programm noch ab sodass man auch mehrere bilder darstellen kann.

doch noch heute fertig geworden 😉
 
Java:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
 

public class Fenster1 extends JFrame implements ActionListener {
 
  
	private static final long serialVersionUID = 1L;
	JTextField field1;
	static Fenster1 frm;
      final JButton button=new JButton("Kombinieren");
      String textinhalt;
      
      public Fenster1(String title) 
      { 
          super();
    
          setLayout(new FlowLayout());
          field1= new JTextField(10);
              
          setTitle(title);
          add(field1);
          add(button);
              
          setSize(400,75);
          setLocationRelativeTo(null);
          setResizable(false);
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          setVisible(true);
  
          button.addActionListener(this);   //hier wird der button zum actionlistener hinzugefügt damit dieser auf den "button" hört
      }
 
      public void actionPerformed(ActionEvent evt)  //hört auf aktionen
      {
    	  Object obj=evt.getSource();
    	  
    	  if(obj==button)               //wenn der button gedrückt wurde
    	  {
    		  textinhalt = field1.getText();
    		  
    		  if(frm.getWidth()>1500)          //WENN DER FRAME SO GROSS IST DASS ER ÜBER DEN GANZEN BILDSCHIRM GEHT, SCHLIESSEN 
    		  {
    			  System.exit(0);
    		  }
    		  
    		  if(textinhalt.equals("wasser"))
    		  {
    			  bildanzeigen("wasser.jpg");            //bild muss so abgespeichert worden sein  
    		  }
    		  
    		  if(textinhalt.equals("wasser+feuer"))
    		  {
    			  bildanzeigen("explosion.jpg");
    		  }
    		  
    		  if(textinhalt.equals("feuer"))
    		  {
    			  bildanzeigen("feuer.jpg"); 
    		  }
   	  
    	  }
      }
    
    public static void main(String[]args)
    {
    	frm=new Fenster1("Fenster");
    }

    public void bildanzeigen(String verzeichnis)  //hier wird ein neues fenster geöffnet und ein bild dortdrin geladen
    {
    	setBackground(Color.WHITE);
         add(new BildPanel(verzeichnis));//hier halt deinen Bildtitel angeben
         pack();
         setLocationRelativeTo(null);
         setVisible(true);
         
    }

    class BildPanel extends JComponent          //das hier ist die klasse mit der du zeichnen kannst
	{
		 
		private static final long serialVersionUID = 1L;
		private BufferedImage img;
	    
	    public BildPanel(String dateiName)
	    {
	        
	        try 
	        {
	            img = ImageIO.read(getClass().getResourceAsStream(dateiName));   //hier wird das verzeichnis geholt und das bild geladen
	        } 
	        
	        catch (IOException e) 
	        {
	            JOptionPane.showMessageDialog(null, dateiName + " wurde nicht gefunden!");  //wenn der dateiname vom bild nicht stimmt
	        }
	        
	        
	        this.setPreferredSize(new Dimension(img.getWidth(), img.getHeight()));
	      
	        
	    }
	    
	    public void paintComponent(Graphics g)
	    {
	        super.paintComponent(g);
	        g.drawImage(img,0,0,null); //hiermit wird das bild gemalt
	    }
	    
	}
    
}

wenn du nicht möchtest dass sich das fenster schließt (bei größe 1500 px) dann musst du zeile 47 ändern

hoffe so ist alles ok wenn nicht einfach sagen
 

Zurück
Oben