Probleme und Fragen

TimeIsTheKey

Aktives Mitglied
Hallo miteinander. Ich habe vorgestern Zeit gefunden mit JAVA anzufangen. Ich möchte ein kleines RPG-Game realisieren. Es soll nicht veröffentlicht werden, ich möchte mir nur mal eine Map basteln und ein paar NPC's. Jetzt bin ich gerade an den Basics dran und ich wollte mir einen Textformatierer zusammenbasteln.
Dieser soll den Text den ich eingebe unten in der gewünschten Grösse und Schriftart ausgeben. Die Schriftart und die Grösse soll man sich per Checkbox aussuchen. Sobald das Grundgerüst da ist möchte ich es zu einem Editor erweitern (halt einfach noch mit Dateien und je nach Lust und Laune werde ich ein paar Optionen versuchen ...).

Hier mal der Code (wahrscheinlich nicht so gut leserlich, ich habs aber versucht ...
Java:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
 
import javax.swing.*;
 
 
public class swing1 extends JFrame implements ActionListener {
 
	// Buttons
    JButton beenden = new JButton("Beenden");
    JButton ausgabe = new JButton("Ausgabe");
    JButton schnormal = new JButton ("Sansserif");
    JButton schserif = new JButton ("Serif");
    JButton schmono = new JButton ("Monospaced");
    JButton scharia = new JButton ("Arial");
    
    //JTextFelder
    JTextField ausgabex = new JTextField(10);
    JTextField eingabe = new JTextField(10);
    
    //Strings die ich brauche um dynamisch zu programmieren
    String speicher = new String();
    String schrift = new String();
 
 
    public swing1() {
         super("Versuch");
    }
 
    public void createGUI() {
    	
    	// Das Fenster wird hier initialisiert
    	// Anmerkung: Da ich auch in Zukunft ohne Layout Manager arbeiten möchte
    	// habe ich Resizable auf false gestellt und das Layout auf null
        this.setVisible(true); 
        setSize(500,435);
        setLocation(100,100);
        setResizable(false);
        setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        JPanel panel = new JPanel();
        add(panel);
        panel.setLayout(null);
        //Die Buttons mit der entsprechenden Grösse und Location
        panel.add(beenden);
        beenden.setSize(100,25);
        beenden.setLocation(400,375);
        panel.add(schnormal);
        schnormal.setSize(100,25);
        schnormal.setLocation(400,35);
        panel.add(schserif);
        schserif.setSize(100,25);
        schserif.setLocation(400,60);
        panel.add(schmono);
        schmono.setSize(100,25);
        schmono.setLocation(400,85);
        panel.add(scharia);
        scharia.setSize(100,25);
        scharia.setLocation(400,110);
        panel.add(eingabe);
        eingabe.setSize(400,200);
        eingabe.setLocation(0,0);
        panel.add(ausgabe);
        ausgabe.setSize(100,25);
        ausgabe.setLocation(400,350);
        panel.add(ausgabex);
        ausgabex.setEditable(false);
        ausgabex.setSize(400,200);
        ausgabex.setLocation(0,200);
        
        // Unten versuche ich ein Bild anzeigen zu lassen
        // Ich habe es aus dem Internet rausgefischt, klappt nicht ...
        // getContentPane().add(new JLabel(new ImageIcon("mario.jpg")));
        // pack;
 
 
        panel.setVisible(true);
        addWindowListener(new meinWindowListener());
        beenden.addActionListener(this);
        ausgabe.addActionListener(this);
        schnormal.addActionListener(this);
        schserif.addActionListener(this);
        schmono.addActionListener(this);
        scharia.addActionListener(this);
    }
 
    public class meinWindowListener extends WindowAdapter{
          public void windowClosing(WindowEvent a){
            System.exit(0);
          }
        }
 
    public void actionPerformed(ActionEvent e){
          if (e.getSource() == this.beenden) System.exit(0);
 
          if (e.getSource() == this.ausgabe) {
              speicher = eingabe.getText();
              ausgabex.setFont(new Font(schrift,Font.PLAIN,12));
              ausgabex.setText(speicher);
              System.out.println(speicher);
 
          }
 
          if (e.getSource() == this.schnormal) {
           schrift = new String("sansserif");
          }
 
          if (e.getSource() == this.schserif) {
           schrift = new String("serif");
          }
 
          if (e.getSource() == this.schmono) {
           schrift = new String("monospaced");
          }
 
          if (e.getSource() == this.scharia) {
           schrift = new String("arial");
          }
 
      }
 
    public static void main(String[] args) {
 
        swing1 GUI = new swing1();
        GUI.createGUI();
    }
 
}

Nun meine Frage zu diesem Code wären:
• Mit welcher Variable kann ich etwas wie Font.PLAIN ersetzen?
Bei Text ist es String, bei Zahlen int. Wie kriege ich das mit Font.PLAIN hin, das wird nämlich nicht in "" geschrieben, also ist es auch kein String...

• Wie zeige ich ein Bild an?
Ich habe schon verschiedene Methoden versucht, aber keine aus dem Internet klappt bei mir. Hier mal ein älterer Versuch, da wird das Bild gefunden aber es wird nicht angezeigt:
Java:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
 
import javax.swing.*;
 
 
 
public class swing extends JFrame implements ActionListener
{
 
        /*Erstelle Instanzen (2 Buttons, 1 Hintergrundbild)*/
        JButton button = new JButton("Beenden");
        JButton ausgabe = new JButton("Ausgabe");
        JTextField eingabe = new JTextField();
        ImageIcon icon = createImageIcon("images/mario.png",
    "images/Hintergrundbild");
 
       
        public static void main(String[] args){
                swing s = new swing();
                s.createGUI();
               
        }
       
        public void actionPerformed(ActionEvent e){
                  if (e.getSource() == this.button) System.exit(0);
                 
                  if (e.getSource() == this.ausgabe) System.out.println("Versuch");
          }
       
        protected ImageIcon createImageIcon(String path,
            String description) {
            java.net.URL imgURL = getClass().getResource(path);
            if (imgURL != null) {
            return new ImageIcon(imgURL, description);
            } else {
            System.out.println("Bild konnte nicht gefunden werden: " + path);
            return null;
            }
        }
       
        public class meinWindowListener extends WindowAdapter{
                  public void windowClosing(WindowEvent a){
                    System.exit(0);
                  }
                }
       
        public void createGUI(){
                /*Erstellt ein kleines Fenster mit einem JFrame*/
               
                JFrame frame = new JFrame();
                setBackground(Color.blue);
                setSize(400,400);
                setLocation(200,200);
                setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
                setVisible(true);
               
                /*Erstelle ein Panel um Text und Buttons hinzuzufügen!*/
               
                JPanel panel = new JPanel();
                add(panel);
                panel.setLayout(new FlowLayout());
                JLabel label = new JLabel("Hallo");
                panel.add(label);
        //      panel.add(icon);
                TextField f = new TextField(10);
                panel.add(f);
                ausgabe.setSize(50,100);
                ausgabe.setLocation(50,50);
                panel.add(button);
                button.setSize(100,25);
                button.setLocation(100,400);
                panel.add(eingabe);
//              eingabe.set
               
                panel.setVisible(true);
                addWindowListener(new meinWindowListener());
                button.addActionListener(this);
                ausgabe.addActionListener(this);
               
        }
 
}

• Ich möchte ja eine ComboBox anzeigen, aber bei mir klappt das nicht. Hier mal mein Versuch:
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
 
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
 
 
public class combobox extends JFrame implements ActionListener{
 
        String[] schrift = { "Arial", "Serif", "Sansserif", "Monospaced" };
        JComboBox liste = new JComboBox(schrift);
       
        public combobox() {
               
        }
 
        public void createWind() {
                setSize(500,600);
                setLocation(100,100);
                setResizable(false);
                setVisible(true);
        setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        JPanel panel = new JPanel();
        liste.setSelectedIndex(2);
        liste.addActionListener(this);
        addWindowListener(new meinWindowListener());
        panel.add(liste);
        panel.setVisible(true);
        }
       
        public class meinWindowListener extends WindowAdapter{
        public void windowClosing(WindowEvent a){
          System.exit(0);
        }
      }
       
        public void actionPerformed(ActionEvent e) {
               
                if (e.getSource() == this.liste) {
                        String schrift = (String)liste.getSelectedItem();
                }
        }
       
        public static void main(String[] args) {
                combobox box = new combobox();
 
                box.createWind();
        }
 
}

Ich hätte dann noch allgemeine Fragen:
• Ich möchte Frames anzeigen lassen (also wenn z.B. ein Charakter läuft). Welche Methode wäre geeignet? Es ist mir egal ob ich es als gif abspielen lasse oder ein paar png Bilder der Reihe nach anzeige, es sollte einfach aussehen als könne der Spieler laufen. ^^"

• Wie realisiere ich am besten Pop-Ups?

MfG SurviveX
 

Atze

Top Contributor
Hallo miteinander. Ich habe vorgestern Zeit gefunden mit JAVA anzufangen. Ich möchte ein kleines RPG-Game realisieren. [...]

ist nicht böse gemeint, aber nach den ersten 3 sätzen dachte ich mir, das geht in die hose :) warum gleich ein spiel? und dann noch ein rpg? oO vielleicht solltest du dir um die grundlagen zu lernen, erstmal ne idee für n kleines konsolenprogramm einfallen lassen, wenns dafür überhaupt schon reicht!

was hast du denn in den 2 tagen gelernt? entweder bist du der rain man, oder wirst ohne grundlagen wohl nicht weit mit deinem game kommen. kannst du bereits programmieren? als beherrscht du eine andere sprache routiniert? oder ist java dein erster "kontakt" zur programmierung?

wie schon gesagt, ist nicht böse gemeint, aber nach 2 tagen java ein rpg zu realisieren halte ich für unmöglich! gibt noch ne reihe weiterer dieser fragen hier, vielleicht hilft dir die forensuche dabei einen einblick in die größe eines solchen projekts zu bekommen!
 

OliverKroll

Aktives Mitglied
Zur ersten Frage:

>Zeile 100: ausgabex.setFont(new Font(schrift,Font.PLAIN,12));
>
>Nun meine Frage zu diesem Code wären:
>• Mit welcher Variable kann ich etwas wie Font.PLAIN ersetzen?
>Bei Text ist es String, bei Zahlen int. Wie kriege ich das mit Font.PLAIN hin, das wird nämlich nicht in "" >geschrieben, also ist es auch kein String...

Die erlaubten Parameter für den Font-Konstruktor findest du auf Java Platform SE 6

Möglich sind:

Constructor Summary
protected Font(Font font) ................................................. Creates a new Font from the specified font.
Font(Map<? extends AttributedCharacterIterator.Attribute,?> attributes) ................................................. Creates a new Font with the specified attributes.
Font(String name, int style, int size) ............................................. Creates a new Font from the specified name, style and point size.

Du möchtest den dritten Konstruktor verwenden. Hier steht:

String name, int style, int size

also kannst du den Style in einem int speichern.

Beispielsweise so:

Java:
int style;
...
style=Font.PLAIN;
 

OliverKroll

Aktives Mitglied
Zur zweiten Frage:
Die einfachste Möglichkeit, ein Bild anzeigen zu lassen, ist:

Java:
package pack1;

import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.io.*;
import javax.imageio.*;

public class Hauptprogramm 
{
	public static Image bild1;
	public static Frame fenster1;
	
	public static void main(String[] args)
	{
		bild1=null;
		
		try
		{
			bild1=ImageIO.read(new File("src/bilder/Mario.png"));
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		
		fenster1=new Frame();
		fenster1.setSize(500,500);
		fenster1.setVisible(true);

		try
		{
			Thread.sleep(500);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		
		fenster1.getGraphics().drawImage(bild1,4,30,null);
	}
}

Es ist absichtlich nicht die paint-Thread benutzt worden, dafür muß man das Fenster regelmäßig neuzeichnen.

Die zweite Möglichkeit ist, die paint-Thread mitzubenutzen:

Java:
package pack1;

import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.io.*;
import javax.imageio.*;

public class Hauptprogramm 
{
	public static Image bild1;
	public static Frame fenster1;
	
	public static void main(String[] args)
	{
		bild1=null;
		
		try
		{
			bild1=ImageIO.read(new File("src/bilder/Mario.png"));
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		
		fenster1=new Frame()
		{
			public void paint(Graphics g)
			{
				g.drawImage(bild1,4,30,this);
			}
		};
		fenster1.setSize(500,500);
		fenster1.setVisible(true);
	}
}

Dann muß man aber auch aufpassen, daß man in der paint-Methode keinen Iterator verwendet, wenn man an einer anderen Programmstelle auch einen Iterator verwendet (ConcurrentModificationException).

Eine dritte Möglichkeit ist, Swing zu verwenden. Könnte man dann so machen:

Java:
package pack1;

import javax.swing.*;
import java.awt.Image;
import java.awt.Graphics;
import javax.imageio.*;
import java.io.*;

public class Hauptprogramm 
{
	public static JFrame fenster1;
	public static Image bild1;
	public static JComponent platz1;
	
	public static void main(String[] args)
	{
		fenster1=new JFrame();
		fenster1.setSize(500,500);
		fenster1.setVisible(true);
		
		bild1=null;
		try
		{
			bild1=ImageIO.read(new File("src/bilder/mario.png"));
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}

		platz1=new JComponent()
		{
			public void paint(Graphics g)
			{
				g.drawImage(bild1,0,0,this);
			}
		};
		
		fenster1.add(platz1);
	}
}

Alle drei Programme sind als zip-Datei im Anhang. Es ist auch ein Mario-Bild dabei.

Im zweiten und dritten Programm kannst du mit repaint() die paint-Methode aufrufen, um das Bild neu zeichnen zu lassen.
 

Anhänge

  • SurviveX1.zip
    85,1 KB · Aufrufe: 0
  • SurviveX2.zip
    85,5 KB · Aufrufe: 0
  • SurviveX3.zip
    85,6 KB · Aufrufe: 0

OliverKroll

Aktives Mitglied
Zur vierten Frage:
einen Charakter laufen lassen.

Schau mal auf meine Homepage ( Videospiele in Java ), da sind vier Spiele, zu denen der Programmtext heruntergeladen werden kann. Im zweiten Spiel (Pac-Man) sind animierte Figuren zu sehen. Die Spiele hatte ich damals für Erstsemester-Studenten geschrieben: die Programme sind hoffentlich ganz leicht zu verstehen.
 

hdi

Top Contributor
Hallo SurviveX!

Ich muss Atze 100% zustimmen - das kann nichts werden.
Damit meine ich nicht, dass du es nicht hinkriegst - mit genug Geduld und Rumprobiererei wirst du wohl früher oder später das hinbekommen, was du dir in etwa vorgestellt hast.

Aber das ist nicht der Sinn der Sache. Sinn der Sache ist es, dass du weißt, was du machst.
Dass du es verstehst. Dann macht es auch viel mehr Spaß ;)

Es ist ein Fehler, sich mit sowas wie einem Spiel zu beschäftigen, solange du die Grundlagen nicht beherrscht! Hab Geduld, lerne erst die Grundlagen, auch wenn das Dinge beinhaltet, die du (deiner Meinung nach!) für dein Spiel gar nicht brauchen würdest.

Du kannst mal den Link in meiner Signatur anklicken. Dort kannst du die Grundlagen theoretisch an einem Abend lernen. (die ersten ~15 Videos sollten dir für den Anfang schon einiges bringen)

Wenn du konkrete Fragen zu dem Stoff aus den Grundlagen hast, stelle sie hier!
(Du kannst mir auch eine PN schreiben auf YT wenn du willst)

lg
 

TimeIsTheKey

Aktives Mitglied
WOW, ihr seid ja schnell :toll:

Azte hat gesagt.:
ist nicht böse gemeint, aber nach den ersten 3 sätzen dachte ich mir, das geht in die hose warum gleich ein spiel? und dann noch ein rpg? oO vielleicht solltest du dir um die grundlagen zu lernen, erstmal ne idee für n kleines konsolenprogramm einfallen lassen, wenns dafür überhaupt schon reicht!

was hast du denn in den 2 tagen gelernt? entweder bist du der rain man, oder wirst ohne grundlagen wohl nicht weit mit deinem game kommen. kannst du bereits programmieren? als beherrscht du eine andere sprache routiniert? oder ist java dein erster "kontakt" zur programmierung?

wie schon gesagt, ist nicht böse gemeint, aber nach 2 tagen java ein rpg zu realisieren halte ich für unmöglich! gibt noch ne reihe weiterer dieser fragen hier, vielleicht hilft dir die forensuche dabei einen einblick in die größe eines solchen projekts zu bekommen!

Ich hatte gestern genug Zeit um mich mit der Konsole zu befassen. Ich habe auch schon 4 oder 5 kleine Programme geschrieben. Aber die Konsole ist langweilig und die Basics kann ich ebenso neben Swing lernen ^^ Ich habe mich für einen RPG entschieden, weil ich keine schwierige Engine dafür brauche und das mit Tiles läuft. Mit ein paar Tutorials kriege ich schon eins hin, und Java ist eine leichte Sprache. Mein Problem ist einfach das ich fast noch gar keine Erfahrung habe und mir noch viele Befehle unbekannt sind. Ich möchte das aber auf dem praktischem Wege lernen. Später möchte ich ein Jump and Run Game machen um ein bisschen Mathe einfliessen zu lassen.
Ich werde morgen oder nächste Woche eins machen, mit diesen Tutorials hier:
Java/Tutorials ? Scientia
Sie sehen verständlich aus, auch in den späteren Kapitel kommt nichts allzu schweres vor.
Nun, ich kann auf Mainframes programmieren (COBOL) und möchte auch eine objektorientiere Sprache können. Es ist zwar etwas neu mit Objekten zu programmieren, aber es geht ^^ Da ich auch noch HTML, CSS, SQL und PHP (sind zwar nur Forensprachen aber egal) sollte es mir nicht so schwer fallen meine Programme zu gestalten. Und in 2 Wochen fange ich in der Schule auch mit einer objektorientierten Sprache an, ich weiss aber nicht ob es C, C++ oder Java ist ^^"

OliverKroll hat gesagt.:
Zur ersten Frage:

>Zeile 100: ausgabex.setFont(new Font(schrift,Font.PLAIN,12));
>
>Nun meine Frage zu diesem Code wären:
>• Mit welcher Variable kann ich etwas wie Font.PLAIN ersetzen?
>Bei Text ist es String, bei Zahlen int. Wie kriege ich das mit Font.PLAIN hin, das wird nämlich nicht in "" >geschrieben, also ist es auch kein String...

Die erlaubten Parameter für den Font-Konstruktor findest du auf Java Platform SE 6

Möglich sind:

Constructor Summary
protected Font(Font font) ................................................. Creates a new Font from the specified font.
Font(Map<? extends AttributedCharacterIterator.Attribute,?> attributes) ................................................. Creates a new Font with the specified attributes.
Font(String name, int style, int size) ............................................. Creates a new Font from the specified name, style and point size.

Du möchtest den dritten Konstruktor verwenden. Hier steht:

String name, int style, int size

also kannst du den Style in einem int speichern.

Beispielsweise so:
Java:
int style;
...
style=Font.PLAIN;

Ach bin ich blöd :oops: Es fällt mir erst jetzt wieder ein das ich das "Font(String name, int style, int size)" schon einmal sah. Da hätte wich wirklich selbst drauf kommen können. Danke!

XHelp hat gesagt.:
Font.PLAIN ist schon an sich ein int

Wieso eigt.? Ist Font.PLAIN so vordefiniert das es als Zahl behandelt werden kann im Hintergrund?

OliverKroll hat gesagt.:
Zur zweiten Frage:
Die einfachste Möglichkeit, ein Bild anzeigen zu lassen, ist:

Java Code: Quelltext in neuem Fenster öffnen

Java:
package pack1;
 
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.io.*;
import javax.imageio.*;
 
public class Hauptprogramm 
{
    public static Image bild1;
    public static Frame fenster1;
    
    public static void main(String[] args)
    {
        bild1=null;
        
        try
        {
            bild1=ImageIO.read(new File("src/bilder/Mario.png"));
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        
        fenster1=new Frame();
        fenster1.setSize(500,500);
        fenster1.setVisible(true);
 
        try
        {
            Thread.sleep(500);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        
        fenster1.getGraphics().drawImage(bild1,4,30,null);
    }
}

Es ist absichtlich nicht die paint-Thread benutzt worden, dafür muß man das Fenster regelmäßig neuzeichnen.

Die zweite Möglichkeit ist, die paint-Thread mitzubenutzen:

Java Code: Quelltext in neuem Fenster öffnen

Java:
package pack1;
 
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.io.*;
import javax.imageio.*;
 
public class Hauptprogramm 
{
    public static Image bild1;
    public static Frame fenster1;
    
    public static void main(String[] args)
    {
        bild1=null;
        
        try
        {
            bild1=ImageIO.read(new File("src/bilder/Mario.png"));
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        
        fenster1=new Frame()
        {
            public void paint(Graphics g)
            {
                g.drawImage(bild1,4,30,this);
            }
        };
        fenster1.setSize(500,500);
        fenster1.setVisible(true);
    }
}


Dann muß man aber auch aufpassen, daß man in der paint-Methode keinen Iterator verwendet, wenn man an einer anderen Programmstelle auch einen Iterator verwendet (ConcurrentModificationException).

Eine dritte Möglichkeit ist, Swing zu verwenden. Könnte man dann so machen:

Java Code: Quelltext in neuem Fenster öffnen
Java:
package pack1;
 
import javax.swing.*;
import java.awt.Image;
import java.awt.Graphics;
import javax.imageio.*;
import java.io.*;
 
public class Hauptprogramm 
{
    public static JFrame fenster1;
    public static Image bild1;
    public static JComponent platz1;
    
    public static void main(String[] args)
    {
        fenster1=new JFrame();
        fenster1.setSize(500,500);
        fenster1.setVisible(true);
        
        bild1=null;
        try
        {
            bild1=ImageIO.read(new File("src/bilder/mario.png"));
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
 
        platz1=new JComponent()
        {
            public void paint(Graphics g)
            {
                g.drawImage(bild1,0,0,this);
            }
        };
        
        fenster1.add(platz1);
    }
}


Alle drei Programme sind als zip-Datei im Anhang. Es ist auch ein Mario-Bild dabei.

Im zweiten und dritten Programm kannst du mit repaint() die paint-Methode aufrufen, um das Bild neu zeichnen zu lassen.

Ich versuch es sobald in an meinem normalen PC bin mit der 1. Variante. Ich lasse von der paint-Methode zuerst mal die Finger, ich möchte nicht das es sich immer wieder neu zeichnet sobald im GUI etwas grafisches passiert.

OliverKroll hat gesagt.:
Zur dritten Frage: Eine JComboBox benutzen:

Kopier einfach das Beispiel aus dem Sun-Tutorial: How to Use Combo Boxes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)

Ich habs versucht genau nach der Anleitung zu machen, aber ich schau es mir nochmals an. Eventuell komm ich selbst drauf. :)

OliverKroll hat gesagt.:
Zur vierten Frage:
einen Charakter laufen lassen.

Schau mal auf meine Homepage ( Videospiele in Java ), da sind vier Spiele, zu denen der Programmtext heruntergeladen werden kann. Im zweiten Spiel (Pac-Man) sind animierte Figuren zu sehen. Die Spiele hatte ich damals für Erstsemester-Studenten geschrieben: die Programme sind hoffentlich ganz leicht zu verstehen.

Ja, das sieht nach etwas verständlichem aus. Die Syntax hat wenig Neues, ich denke ich sollte keine Probleme haben ^^ Danke!

OliverKroll hat gesagt.:
Zur fünften Frage: wie erstellt man Popup-Menüs ? Schau dir dazu mal das Sun-Tutorial an: How to Use Menus (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)

Das habe ich mir schon angeschaut. Ich wollte das später im Editor editieren. Was ich suchte war so etwas:
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class ModalTest extends JFrame
{
  public ModalTest(String title)
  {
    super(title);
    setDefaultCloseOperation (EXIT_ON_CLOSE);
    setSize(800, 600);
    setLocationRelativeTo(null);
    addMouseListener (new DialogCaller());
    setResizable(false);
    setVisible(true);
  }
 
  @Override
  public void paint (Graphics g)
  {
    super.paint(g);
    g.drawString("Click or die!", 100, 100);
  }
 
  public static void main(String[] args) {
    new ModalTest("ModalTest");
  }
}
class DialogCaller extends MouseAdapter
{
   @Override
   public void mouseClicked (MouseEvent evt)
   {
     JDialog popup = createDialog ((Component)evt.getSource());
 
     Dimension startSize = new Dimension (150, 50); // frames cannot be 0/0, that would thus look bad
     Point startPoint = new Point (evt.getPoint());
     SwingUtilities.convertPointToScreen (startPoint, (Component)evt.getSource());
     startPoint.translate (-startSize.width / 2, -startSize.height / 2); // center it
     DialogAnimator da = new DialogAnimator (popup, startPoint, popup.getLocation(),
                         startSize, popup.getSize(), 1500L);
 
     da.start();
     popup.setVisible(true);
   }
 
   private static JDialog createDialog(Component parentComponent)
   {
     JOptionPane jop = new JOptionPane("That's just a simple test message, dude! No worryin'!",
                                       JOptionPane.ERROR_MESSAGE, JOptionPane.DEFAULT_OPTION);
     return jop.createDialog(parentComponent, "Test");
   }
}
class DialogAnimator implements Runnable
{
   private JDialog dialog;
   private Point startPoint, endPoint;
   private Dimension startSize, endSize;
   private long time, startTime;
   private boolean started;
 
   public DialogAnimator (JDialog dialog, Point startPoint, Point endPoint,
                          Dimension startSize, Dimension endSize, long time)
   {
      this.dialog = dialog;
      this.startPoint = startPoint;
      this.endPoint = endPoint;
      this.startSize = startSize;
      this.endSize = endSize;
      this.time = time;
      started = false;
   }
 
   public synchronized void start()
   {
      if (started)
         throw new IllegalStateException ("Animation has already started");
      startTime = System.currentTimeMillis();
      started = true;
      new Thread(this).start();
   }
 
   @Override
   public void run()
   {
      for (long timePassed = 0; timePassed < time; timePassed = System.currentTimeMillis() - startTime){
         double perc = 1.0 * timePassed / time;
         Point currentPoint = lerpPoint (startPoint, endPoint, perc);
         Dimension currentSize = lerpSize (startSize, endSize, perc);
         dialog.setLocation (currentPoint);
         dialog.setSize (currentSize);
      }
      dialog.setLocation (endPoint);
      dialog.setSize (endSize);
   }
 
   private static Point lerpPoint (Point p1, Point p2, double perc)
   {
     Point ret = new Point();
     ret.x = p1.x + (int) Math.round (perc * (p2.x - p1.x));
     ret.y = p1.y + (int) Math.round (perc * (p2.y - p1.y));
     return ret;
   }
 
   private static Dimension lerpSize (Dimension d1, Dimension d2, double perc)
   {
     Dimension ret = new Dimension();
     ret.width = d1.width + (int) Math.round (perc * (d2.width - d1.width));
     ret.height = d1.height + (int) Math.round (perc * (d2.height - d1.height));
     return ret;
   }
}

Das war für das RPG Game gedacht als MouseEvent damit sich ein Dialogfenster öffnet.

Hallo SurviveX!

Ich muss Atze 100% zustimmen - das kann nichts werden.
Damit meine ich nicht, dass du es nicht hinkriegst - mit genug Geduld und Rumprobiererei wirst du wohl früher oder später das hinbekommen, was du dir in etwa vorgestellt hast.

Aber das ist nicht der Sinn der Sache. Sinn der Sache ist es, dass du weißt, was du machst.
Dass du es verstehst. Dann macht es auch viel mehr Spaß

Es ist ein Fehler, sich mit sowas wie einem Spiel zu beschäftigen, solange du die Grundlagen nicht beherrscht! Hab Geduld, lerne erst die Grundlagen, auch wenn das Dinge beinhaltet, die du (deiner Meinung nach!) für dein Spiel gar nicht brauchen würdest.

Du kannst mal den Link in meiner Signatur anklicken. Dort kannst du die Grundlagen theoretisch an einem Abend lernen. (die ersten ~15 Videos sollten dir für den Anfang schon einiges bringen)

Wenn du konkrete Fragen zu dem Stoff aus den Grundlagen hast, stelle sie hier!
(Du kannst mir auch eine PN schreiben auf YT wenn du willst)

lg
___________

Es ist nicht so das das meine erste Programmier-Sprache ist. Das meiste kenne ich schon. Die Befehle haben für mich jetzt nur neue Namen. Praktisches Lernen macht mir mehr Spass, ich habe in der Schule auch schon die ersten 200 Seiten eines Java-Buches gelesen, aber das ist viel zu viel (das Buch hatte 1100 Seiten). Meine Berufssprache läuft auf einem Mainframe und es ist sehr sehr identisch zu der Java-Konsolen-Programmierung. Nur heissen die Befehle anders und es ist sequentiell. Die Videos werde ich mir aber trotzdem anschauen ;) (Hab dich auch schon abonniert ^^)

Hey vielen Dank, ihr habt mir schon sehr geholfen. Morgen arbeite ich an dem Editor weiter und versuche nicht nur das Grundgerüst sondern auch den erweiterten Editor mit Dateien usw. zu verwirklichen. Die nächste Woche arbeite ich zwar (noch eine Woche in einem Callcenter ...) aber es ist mir gestattet in den Wartezeiten das zu tun was ich möchte und deswegen werde ich mir die die Source Codes anschauen. Am 16. werde ich mich dann am RPG ranmachen, sollte schon hinhauen.

MfG SurviveX

PS: Beachtet Grammatik/Rechtschreibe-Fehler nicht, es ist ziemlich viel Text und ich werde wahrscheinlich ein paar übersehen haben ^^"
 
Zuletzt bearbeitet:

hdi

Top Contributor
Ich will dich nicht nerven, und das wird daher auch mein letzter Post dazu sein, aber ich möchte noch einmal betonen dass es der falsche Weg ist, den du einschlägst :(

Vergiss dein RPG! Vergiss alles was mit Dateien zu tun hat, alles was mit einer GUI zu tun hat!
Das sind Themen mit denen solltest du dich noch lange nicht beschäftigen.

Es gibt vorher noch viele elementare Dinge, die du zu lernen hast. Wenn du das nicht tust, ist alles, was du jetzt an deinem RPG machst, auswendig lernen, bzw. denken dass du es verstehst, obwohl du es nicht tust.

Versteh mich nicht falsch - Praxis-Übung ist immer gut! Und auf jeden Fall ist es toll wenn du dir so ein Projekt ausgedacht hast. Aber es ist dazu ein Tick zu früh ;) Lerne die Grundlagen!
GUI = NICHT Grundlage
Spiel = NICHT Grundlage

..ist nur gut gemeint!
Wenn du erst die Grundlagen lernst sparst du dir viel Zeit, und viele Fragezeichen über deinem Kopf ;)

lg
 

XHelp

Top Contributor
Nun, ich kann auf Mainframes programmieren (COBOL) und möchte auch eine objektorientiere Sprache können. Es ist zwar etwas neu mit Objekten zu programmieren, aber es geht ^^ Da ich auch noch HTML, CSS, SQL und PHP (sind zwar nur Forensprachen aber egal) sollte es mir nicht so schwer fallen meine Programme zu gestalten.

3 Sprachen aus deiner Aufzählung sind nicht mal Programmiersprachen ;) Außerdem ist PHP auch Objektorientiert. Was eine Forensprache ist, ist mir allerdings rätselhaft.

Java:
Wieso eigt.? Ist Font.PLAIN so vordefiniert das es als Zahl behandelt werden kann im Hintergrund?
Eine schlauere Antwort als "weil es so ist" fällt mir nicht ein. Auszug aus den Javadocs:
public static final int PLAIN

Auch wenn du scheinbar felsenfest überzeugt bist ein RPG zu machen: fange klein an.
 

TimeIsTheKey

Aktives Mitglied
Ich will dich nicht nerven, und das wird daher auch mein letzter Post dazu sein, aber ich möchte noch einmal betonen dass es der falsche Weg ist, den du einschlägst :(

Vergiss dein RPG! Vergiss alles was mit Dateien zu tun hat, alles was mit einer GUI zu tun hat!
Das sind Themen mit denen solltest du dich noch lange nicht beschäftigen.

Es gibt vorher noch viele elementare Dinge, die du zu lernen hast. Wenn du das nicht tust, ist alles, was du jetzt an deinem RPG machst, auswendig lernen, bzw. denken dass du es verstehst, obwohl du es nicht tust.

Versteh mich nicht falsch - Praxis-Übung ist immer gut! Und auf jeden Fall ist es toll wenn du dir so ein Projekt ausgedacht hast. Aber es ist dazu ein Tick zu früh ;) Lerne die Grundlagen!
GUI = NICHT Grundlage
Spiel = NICHT Grundlage

..ist nur gut gemeint!
Wenn du erst die Grundlagen lernst sparst du dir viel Zeit, und viele Fragezeichen über deinem Kopf ;)

lg

Bis zum 16. (da fange ich ja mit dem RPG an) habe ich mir deine Online-Videos angesehen und einen Käufer für deinen neuen Kurs hast du mit mir auch schon. Und ein Mini-Editor ist ja auch nicht so ein grosses Projekt, wenn morgen nichts dazwischen kommt bringe ich das schon hin. Für Basics etc. habe ich während der Arbeit Zeit, da beträgt die Wartezeit im Schnitt 4 - 5 Stunden, das sind 25 Stunden in der Woche zum Java lernen. Das haut schon hin ^^

3 Sprachen aus deiner Aufzählung sind nicht mal Programmiersprachen ;) Außerdem ist PHP auch Objektorientiert. Was eine Forensprache ist, ist mir allerdings rätselhaft.

Java:
Wieso eigt.? Ist Font.PLAIN so vordefiniert das es als Zahl behandelt werden kann im Hintergrund?
Eine schlauere Antwort als "weil es so ist" fällt mir nicht ein. Auszug aus den Javadocs:


Auch wenn du scheinbar felsenfest überzeugt bist ein RPG zu machen: fange klein an.

Ich weiss das es keine Programmiersprachen sind, deswegen nannte ich sie Forensprache (natürlich erfunden), weil man mit diesen Sprachen halt Homepages und Foren aufbaut. Der Grund für die Aufzählung war eben die Gestaltung (GUI). Und der Grund wieso ich COBOL genannt habe war, weil ich eigt. meine Kenntnisse von COBOL nach Java mitnehmen kann und mir nur die neuen Begriffe merken muss. Ich habe eigt. gute Voraussetzungen ^^

MfG SurviveX
 

Atze

Top Contributor
ok, grundkenntnisse scheinen vorhanden zu sein, das ist schonmal gut! :) und natürlich sind spiele interessater als kleine übungen, aber ich würd es dann wenigstens vorher gut durchplanen. auch wenn du dich dann durchkämpfen musst, verrennst du dich wenigstens nicht. klassendiagramme etc sollten zumindest auf nem schmierzettel vorhanden sein, so wie grobe aubläufe des spiels. auch über den sinn und zweck der vererbung solltest du dir VOR dem beginn im klaren sein, der grundpfeiler der objektorientierung, damit machst du es dir leichter! erst wenn du (den groben plan) durchdacht hast, solltest du anfangen! :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D JAVA AWT Fragen und Probleme Java Basics - Anfänger-Themen 15
M JPanel - einige Fragen und Probleme Java Basics - Anfänger-Themen 6
V Java Fenster, einige Probleme und Fragen Java Basics - Anfänger-Themen 5
S Probleme & Fragen zur length Methode Java Basics - Anfänger-Themen 2
D Probleme bei Verwendung short und int im Constuctor Java Basics - Anfänger-Themen 6
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
I Projekte in IDE untereinander sharen / Probleme beim Build Java Basics - Anfänger-Themen 8
MiMa Probleme mit Datentyp long ?? Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
Jxhnny.lpz TicTacToe Spiel vs Computer. (Probleme) Java Basics - Anfänger-Themen 7
B Quiz mit RMI Probleme mit RMI start Java Basics - Anfänger-Themen 4
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
V Probleme Guessing Game Java Basics - Anfänger-Themen 8
hebein PDF Ausdruck auf Drucker - Probleme mit Format Java Basics - Anfänger-Themen 17
R JMenu/JMenuItem Probleme Java Basics - Anfänger-Themen 2
B Static vs non static und Probleme daraus Java Basics - Anfänger-Themen 13
J Probleme mit dem Debugger Java Basics - Anfänger-Themen 4
I Probleme mit OutputStream - Datei lässt sich nicht öffnen Java Basics - Anfänger-Themen 4
J Probleme mit Kompilierung Java Basics - Anfänger-Themen 11
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
C Probleme mit paintComponent Java Basics - Anfänger-Themen 13
P Probleme mit JUnit-Tests, es kommt was anderes raus als bei manuellen Tests Java Basics - Anfänger-Themen 5
E JavaFX Editor Probleme mit der Zwischenablage Java Basics - Anfänger-Themen 12
C Probleme mit dem Erstellen und Importieren von Packages Java Basics - Anfänger-Themen 6
3 OOP erste Versuche, OOP zu verstehen. Probleme mit gettern und settern Java Basics - Anfänger-Themen 4
R Erste Schritte Probleme bei 2D Spielfeld, mit einzufügender "Person" Java Basics - Anfänger-Themen 5
P Probleme bei der Installation von JavaFX Java Basics - Anfänger-Themen 3
S Mehrere Probleme im Code Java Basics - Anfänger-Themen 7
D Probleme mit JFrame und der Größe Java Basics - Anfänger-Themen 8
Dimax String Probleme Java Basics - Anfänger-Themen 12
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
Splayfer Java Array Probleme Java Basics - Anfänger-Themen 3
J Probleme bei IllegalArgumentException "werfen". Java Basics - Anfänger-Themen 1
K Probleme bei der Ausgabe - komme nicht weiter :/ Java Basics - Anfänger-Themen 15
X Probleme im Umgang mit PriorityQueue Java Basics - Anfänger-Themen 75
D Probleme mit dem Windowbuilder und JComboBox Java Basics - Anfänger-Themen 2
M Regex Probleme (mal wieder) Java Basics - Anfänger-Themen 3
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
X Probleme mit Übungsaufgaben zu Zahlentypen Java Basics - Anfänger-Themen 4
G Probleme bei Aufgabe Java Basics - Anfänger-Themen 12
P Erste Schritte Probleme mit dem Programmieren Java Basics - Anfänger-Themen 12
B Probleme bei einer Aufgabe Java Basics - Anfänger-Themen 19
Franzi1001 Probleme mit Eclipse Java Basics - Anfänger-Themen 7
T Probleme bei Installation von JDK Java Basics - Anfänger-Themen 2
C Probleme mit String-Vergleich Java Basics - Anfänger-Themen 4
C Probleme bei Regex Java Basics - Anfänger-Themen 9
V Probleme mit Arrays Java Basics - Anfänger-Themen 8
D Kleine Probleme mit Split-Befehlen Java Basics - Anfänger-Themen 5
T Probleme mit Strings Java Basics - Anfänger-Themen 6
G Probleme bei Frame aufgaben Java Basics - Anfänger-Themen 6
N Probleme mit dem ActionListener Java Basics - Anfänger-Themen 4
D Probleme beim Kompelieren mache ich etwas falsch ? Java Basics - Anfänger-Themen 3
L Probleme mit Java Java Basics - Anfänger-Themen 3
S Probleme mit abspielen einer .wav Datei Java Basics - Anfänger-Themen 2
J Probleme bei der Umwandlung einer Farbe von Hex zu RGB Java Basics - Anfänger-Themen 8
K Probleme beim Programm schreiben - Lesen von Dateiinhalten -zaehlen von Wörtern/ Buchstaben Java Basics - Anfänger-Themen 4
M Probleme beim aktualisieren eines JPanels Java Basics - Anfänger-Themen 7
J Probleme beim Array ausgeben Java Basics - Anfänger-Themen 4
M Probleme bei rekursiver Zuordnung Java Basics - Anfänger-Themen 1
I Probleme mit 2 dimensionale Arrays Java Basics - Anfänger-Themen 3
H Best Practice View probleme Java Basics - Anfänger-Themen 2
B Probleme mit Kreisberechnung Java Basics - Anfänger-Themen 15
E Probleme mit Scanner Java Basics - Anfänger-Themen 4
J Eclipse Export Probleme Java Basics - Anfänger-Themen 25
M Probleme beim verwenden von Packages Java Basics - Anfänger-Themen 6
D Probleme mit der Übergabe einer BorderPane Java Basics - Anfänger-Themen 2
J Interface Probleme bei der Implementierung Java Basics - Anfänger-Themen 1
BlueFox Tabelle in der Konsole ausgeben - Probleme Java Basics - Anfänger-Themen 1
G Methoden Probleme beim Methodenaufruf Java Basics - Anfänger-Themen 2
V Klassen ObjectInputStream ->ReadObject Probleme Java Basics - Anfänger-Themen 5
P Probleme mit der Do-Schleife Java Basics - Anfänger-Themen 2
F Erste Schritte Compiling Probleme Java Basics - Anfänger-Themen 13
S Neuling und Probleme bei Schulaufgabe Java Basics - Anfänger-Themen 5
J Anfänger: ActionListener und ProcessBuilder machen Probleme Java Basics - Anfänger-Themen 6
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
M Array mit eigenem Datentyp probleme beim übergeben Java Basics - Anfänger-Themen 6
M Probleme mit Eclipse Java Basics - Anfänger-Themen 20
G Probleme beim casten von double zu int Java Basics - Anfänger-Themen 3
E 2 Probleme - Datum & private finale Variablen Java Basics - Anfänger-Themen 5
S Compiler-Fehler javac hat Probleme mit Paketen unter OSX Java Basics - Anfänger-Themen 2
J Probleme beim schreiben von Dateien Java Basics - Anfänger-Themen 5
B Variablen Probleme mit Eclipse Java Basics - Anfänger-Themen 6
H Mouse- und KeyListener Probleme? Java Basics - Anfänger-Themen 5
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
I Probleme bei Verzeichnissanalyse Java Basics - Anfänger-Themen 12
F Probleme mit privaten Klassen (abstrakten Klassen) Java Basics - Anfänger-Themen 1
H Probleme mit Klassen...oder: Eine Uhr Java Basics - Anfänger-Themen 9
G Probleme mit Konsole Java Basics - Anfänger-Themen 4
S Probleme mit GamGrid Spiel-Erstellung => Actor reagiert nicht auf Tastatur Java Basics - Anfänger-Themen 2
G Probleme mit Eclipse oder der URL Klasse Java Basics - Anfänger-Themen 5
W Verständnis Probleme bei der while-Schleife und continue Java Basics - Anfänger-Themen 21
M Probleme mit Anzeigen von String in GUI und if-Anweisung Java Basics - Anfänger-Themen 9
T Konstruktor Probleme Java Basics - Anfänger-Themen 3
W Methoden Probleme mit der Scanner Methode Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben