Viereck zeichnen über TextField-Eingabe /ActionListener

razor91

Mitglied
Hallo
Folgendes Problem:

Ich muss ein Programm schreiben, welches das Heron-Verfahren visualisiert.
Dazu habe ich schon das Layout mit den Buttons und den Eingabefeldern fertig:
Java:
/******************************************************************************
* Ein Programm zur Visualisierung des Heron-Verfahrens
* @author: Christian Pankraz
*****************************************************************************/

import java.awt.*;
import javax.swing.*;


public class Heron1 extends JFrame{

  JPanel radi, naeher, veck; //Die 3 Panels

  JLabel lab_zahl, lab_nah;  //Die Informationen zu den Feldern

  JTextField tf_zahl, tf_nah;   // Die 2 Eingabefelder

  JButton bu_next;              //Der "Naechster Schritt"-Button
  
  
  public Heron1() { // Hier wird das Layout des Programms entworfen
    super();
    this.setTitle("Das Heron-Verfahren");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
    baue_gui();
    
    
  } // Ende Konstruktor
   void baue_gui(){

    radi=new JPanel();   //Hier kann der Radikant ausgewählt werden

    lab_zahl=new JLabel("Gib die zu bearbeitende Zahl ein:");
    tf_zahl=new JTextField("",4);

    radi.add(lab_zahl);
    radi.add(tf_zahl);      //Die Elemente werden zum Panel hinzugefügt



    naeher=new JPanel();   //Hier kann der 1.Neaherungswert eingegeben werden
    lab_nah=new JLabel("Gib einen 1. Näherungswert an:");
    tf_nah=new JTextField("",5);
    bu_next=new JButton("Weiter");
    veck=new JPanel();
    veck.setPreferredSize(new Dimension(580,580));
    veck.setBorder(BorderFactory.createLineBorder(Color.BLACK, 3));
    

    naeher.add(lab_nah);
    naeher.add(tf_nah);
    naeher.add(bu_next);    //Die Elemnte werden zum Panel hinzugefügt
    
   
    
    
    this.setPreferredSize(new Dimension(600,665));
    this.setLayout(new FlowLayout());
    this.add(radi);
    this.add(naeher);
    this.add(veck);
    this.pack();
    this.setVisible(true);
    }


    
    public static void main (String [] args) {
    Heron1 Heron = new Heron1();
    }
  }


Was ich jetzt noch brauche:
Wie kann ich machen, dass das Programm ein Viereck mit den Eingegeben Maßen zeichnet sobald ich auf den Button klicke? (in das "veck"-Panel)

Die Maße müssen sein:
Breite: Wert von "tf_nah"
Höhe: Wert von "tf_zahl"/"tf_nah"

Was ich weiß, ist, dass ich ein Rechteck mit

Java:
g.drawRect(x, y, Breite, Höhe);

zeichnen kann. Ich weiß aber nicht wie ich dort über das TextField die Daten einlesen kann.

Ich weiß, dass das über den ActionListener geht, allerdings nicht wie
(bis auf das " *element*.addActionListener(*name des A.L.*); " bei den Button und den TextFields).

Ich hoffe ihr versteht was ich brauche und könnt mir helfen ;).
 

razor91

Mitglied
ja wie das in der theorie funktioniert weiß ich ;)
habe das, was du mir gesagt hast ja schon im 1. post geschrieben.
nur weiß ich nicht wie ich dann ein Viereck zeichnen kann.
einfach mit getText() ? oder wie?
 

AmunRa

Gesperrter Benutzer
Naja ein Viereck zeichnet man mit

Graphics g
g.drawRect()


dazu musst du dir mal das Tutorial hier in den FAQ durchlesen da wird das echt gut beschrieben.
 

razor91

Mitglied
ok, habe mir jetzt das ein oder andere durchgelesen, was eventuell in meine Richtung gehen könnte, aber 1. nichts gefunden was mir weitergeholfen hat
und 2. von dem was ich gelesen habe (vor allem das mit dem Listener & Events) überhaupt nichts verstanden, weil das für mich viel zu kompliziert beschrieben ist.

Also kann mir jemand weiterhelfen und erklären wie ich denn jetzt ein Viereck durch Eingabe zeichnen lassen kann?
 

AmunRa

Gesperrter Benutzer
Was bitte ist ganau dein Problem

Das Zeichnen, dann solltest du dir wirklich zuerst die Grundlagen für Zeichnen ansehen dazu gibts wie bereits gesagt das Tutorial hier im Forum.

Oder ist dein Problem das auslesen der Daten aus deinem Textfeld?
Integer.parseInt()

oder der korrekte Umgang mit einem Listener?

Schreib wo genau dein Problem ist und es wird dir wer helfen.
 

razor91

Mitglied
irgenwie habe ich das gefühl, dass ich mich ständig wiederholen muss.

Ich weiß NICHT wie ich ein Viereck zeichnen lassen kann durch eine Eingabe und dem Button-klick.
Ich weiß NICHT wie ich das mit dem ActionListener machen soll.
Ich weiß aber, dass ich einfach mit drawRect(x,y,breite,höhe) (oder so ähnlich) ein für den User unveränderbares Viereck zeichnen kann.

Also wie mache ich, dass Franz 2 Zahlen eingibt, auf den Button "Weiter" klickt und dann ein Viereck gezeichnet wird, das den eingegebenen Zahlen-Werten entspricht (höhe, breite) ?
 

AmunRa

Gesperrter Benutzer
So ich hab dir mal ein testprogram geschreiben

Mit den Listenern, funktionier das so.
Wenn du auf den Button Klickst, ruft der Button bei eimen ActionListener die Methode actionPerformed auf. Da der Button aber nicht weisbei welchem Listenern er das machen muss, musst du im mit der Methode addActionListener den Listener bekannt geben.
Da es keine vorgeschriebenen Listener gibt die genau das machen was du willst musst du dir zuerst selbst einen schreiben. Dazu gibt es mehrer Wege einen Davon hab ich da unten verwendet:
Du lässt deinen Klasse das Interface ActionListener erben. Dies bedeutet dann, das deine Klasse auch ein ActionListener ist. daraufhin musst du die actionPerformed methode überschreiben. wenn du nun zu deinem Button den ActionListener hinzufügst (addActionListener), wird nun immer die actionPerformed Methode aufgerufen.

Das Zeichnen deines Rechtecks geht am einfachsten,wenn du dir eine eigenen Klasse erzeugst die die Aufgabe des Zeichnens übernimmt. Das ist in dem Beispiel darunter die MyPanel -Klasse, die von JPanel abgeleitet ist. Dort habe ich die paintComponent Methode überschireben und das zeichnen des Rechtecks eingefügt. solange von dieser Klasse die Methode drawRect nicht aufgerufen wird wird auch nichts gezeichnet.

Die DrawRectMethode wird in der selbstgeschriebenen Methode actionPerformed des ActionListeners aufgerufen, und diese übergibt zwei Int Werte als Parameter.
(Breite und Höhe)

Die Zwei Parameter hollt er sich aus dem TextFeld. Er liest den String aus den TextFeldern aus mit getText und parst diese dann zu einem int (Integer.parseInt)
ACHTUNG: wenn du jetzt bei meinem Beispeil einen Buchstaben in dasTextFeld eingibst und den Button drückst stürzte das Programm ab.

So ich hoffe das hilft dir ein bisschen weiter

Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class Test extends JFrame implements ActionListener{
	MyPanel drawPanel;
	JTextField txt1,txt2;
	public static void main(String[] args){
		new Test();
	}
	
	
	public Test(){
		super ("Test Frame");
		this.setSize(500,500);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JPanel panel = new JPanel();
		txt1= new JTextField();
		txt1.setPreferredSize(new Dimension(150,30));
		txt2= new JTextField();
		txt2.setPreferredSize(new Dimension(150,30));
		panel.add(txt1);
		panel.add(txt2);
		
		JButton button= new JButton("Weiter");
		button.addActionListener(this);  //  <-- Hier sagst du dem Actionlistener, 
											//	 das er reagieren soll wenn dieser Button gedrückt wird
		panel.add(button);
		this.getContentPane().setLayout(new BorderLayout());
		this.getContentPane().add(panel, BorderLayout.NORTH);
		
		this.setVisible(true);
		
		drawPanel= new MyPanel();
		this.getContentPane().add(drawPanel, BorderLayout.CENTER);

	}


	@Override
	public void actionPerformed(ActionEvent arg0) {
		drawPanel.drawRect(Integer.parseInt(txt1.getText()),Integer.parseInt(txt2.getText()));
		
	}
	
}


Java:
import java.awt.Graphics;

import javax.swing.JPanel;


public class MyPanel extends JPanel {
	
	int w,h;
	boolean drawRect=false;
	public void drawRect(int a, int b) {
		w=a;
		h=b;
		drawRect=true;
		repaint();
		
	}
	
	
	
	protected void paintComponent(Graphics g){
		super.paintComponent(g);
		
		if (drawRect){
			g.fillRect(20,20,w,h);
		}
	}

}
 

razor91

Mitglied
Also erstmal auf jeden Fall danke, genau das, was ich gebraucht habe.

Kurze Frage noch: Wie mache ich das ganze (komplett) ohne BorderLayout?

Wenn ich das komplett mit FlowLayout mache, sehe ich nichts vom Viereck....

Das ist, was ich bis jetzt habe:

Java:
/******************************************************************************
* Ein Programm zur Visualisierung des Heron-Verfahrens
* @author: 
*****************************************************************************/

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;


public class Heron1 extends JFrame implements ActionListener{

  JPanel radi, naeher; //Die 2 Panels

  JLabel lab_zahl, lab_nah;  //Die Informationen zu den Felder

  JTextField tf_zahl, tf_nah;   // Die 2 Eingabefeldern

  JButton bu_next;              //Der "Naechster Schritt"-Button
  
  MyPanel veck;
  
  public Heron1() { // Ab hier wird das Layout des Programms entworfen
    super();
    this.setTitle("Das Heron-Verfahren");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
    baue_gui();
    
    
  } // Ende Konstruktor
   void baue_gui(){

    radi=new JPanel();   //Hier kann der Radikant ausgewählt werden

    lab_zahl=new JLabel("Gib die zu bearbeitende Zahl ein:");
    tf_zahl=new JTextField("",4);

    radi.add(lab_zahl);
    radi.add(tf_zahl);      //Die Elemente werden zum Panel hinzugefügt



    naeher=new JPanel();   //Hier kann der 1.Neaherungswert eingegeben werden
    lab_nah=new JLabel("Gib einen 1. Näherungswert an:");
    tf_nah=new JTextField("",5);
    bu_next=new JButton("Weiter");
    bu_next.addActionListener(this);

    naeher.add(lab_nah);
    naeher.add(tf_nah);
    naeher.add(bu_next);    //Die Elemnte werden zum Panel hinzugefügt
    


    veck=new MyPanel();

    
    this.setPreferredSize(new Dimension(600,665));
    this.setLayout(new FlowLayout());
    this.add(radi);
    this.add(naeher);
    this.add(veck);
    this.pack();
    this.setVisible(true);
    }


    
    public static void main (String [] args) {
    new Heron1();
    }
    @Override
    public void actionPerformed(ActionEvent arg0) {
        veck.drawRect(Integer.parseInt(tf_zahl.getText()),Integer.parseInt(tf_nah.getText()));
    }

  }

Java:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Viereck / Rechteck Prüfung innerhalb einem bestimmten Bereich Java Basics - Anfänger-Themen 2
A 2D Array Magisches Viereck Java Basics - Anfänger-Themen 4
L Magisches Viereck - Probleme mit Arrays Java Basics - Anfänger-Themen 3
P Viereck mit Sterne - Anfänger bittet um Kritik und Anregung Java Basics - Anfänger-Themen 11
A Viereck erstellen und Webcamtracking Java Basics - Anfänger-Themen 6
M Viereck "wandern" lassen Java Basics - Anfänger-Themen 5
K JPanel, JFrame, paint() und wo ist mein Viereck ? Java Basics - Anfänger-Themen 19
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
luggas89 Mit Jframe live zeichnen Java Basics - Anfänger-Themen 4
K 3D Fläche Zeichnen Java Basics - Anfänger-Themen 2
J Bild auf Hintergrundbild zeichnen Java Basics - Anfänger-Themen 5
R Iterativ zeichnen Java Basics - Anfänger-Themen 1
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
P JFrame, Linien zeichnen, MouseListener Java Basics - Anfänger-Themen 2
KogoroMori21 Mit einer Schleife eine Treppe zeichnen Java Basics - Anfänger-Themen 29
V Speicherzustand zeichnen Java Basics - Anfänger-Themen 0
O Klappt nicht: Ein Panel neu zeichnen Java Basics - Anfänger-Themen 3
CptK Interface Bilder mit Graphics g zeichnen Java Basics - Anfänger-Themen 7
B Java JFrame zeichnen Java Basics - Anfänger-Themen 4
Mosquera f(x)=x² zeichnen Java Basics - Anfänger-Themen 5
J Graphen in Java zeichnen Java Basics - Anfänger-Themen 11
L Anfängerin möchte Linie zeichnen Java Basics - Anfänger-Themen 8
D JPanel mehrere Formen zeichnen Java Basics - Anfänger-Themen 5
S Zeichnen mit Wiederholungen Java Basics - Anfänger-Themen 12
B Wie kann ich Linien rekursiv zeichnen? Java Basics - Anfänger-Themen 4
P Einen String mittig zeichnen? Java Basics - Anfänger-Themen 1
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
W Wie kann ich in Java eine Kurve aus Punkten zeichnen? Java Basics - Anfänger-Themen 25
snipesss Linie zeichnen ohne extra Klasse? Java Basics - Anfänger-Themen 3
C Umrisse von Bilddateien mithilfe Polygonen zeichnen Java Basics - Anfänger-Themen 5
G Aus einem Code ein Sequenzdiagramm zeichnen? Java Basics - Anfänger-Themen 1
K Rechtecke rekursiv zeichnen Java Basics - Anfänger-Themen 20
V Quadrate rekursiv zeichnen Java Basics - Anfänger-Themen 7
B Java Graphen zeichnen - Brauche Hilfe Java Basics - Anfänger-Themen 9
C Schleifenaufgabe - Molekül zeichnen Java Basics - Anfänger-Themen 6
K Ungenauigkeit beim Zeichnen von Funktionen Java Basics - Anfänger-Themen 6
H Linie zeichnen... Java Basics - Anfänger-Themen 16
N Treppe zeichnen Java Basics - Anfänger-Themen 1
M Quadrat zeichnen einfach bitte! Java Basics - Anfänger-Themen 2
P Shape Zeichnen klappt nicht - einlesen der Breite/Höhe schon Java Basics - Anfänger-Themen 1
M in Java zeichnen Java Basics - Anfänger-Themen 2
J JLabel Icon neu zeichnen Java Basics - Anfänger-Themen 2
J Rechteck zeichnen mit Canvas Java Basics - Anfänger-Themen 7
D Zeichnen, Schleifen Java Basics - Anfänger-Themen 7
S Zeichnen , Schleifen Java Basics - Anfänger-Themen 4
S Rechteck zeichnen Java Basics - Anfänger-Themen 2
S Ein Graphics Obejct mehrmals mit denselben Eigenschaften zeichnen lassen?!?!? Java Basics - Anfänger-Themen 4
S Wo beginnt ein Draw String zu zeichnen. Java Basics - Anfänger-Themen 4
S Paint Anwendung: Freihandlinien zeichnen Java Basics - Anfänger-Themen 4
llabusch Layout neu zeichnen lassen Java Basics - Anfänger-Themen 2
A Histogramm zeichnen Java Basics - Anfänger-Themen 2
S Punkt in Java zeichnen Java Basics - Anfänger-Themen 14
E Dreieck zeichnen Java Basics - Anfänger-Themen 3
gamebreiti Methoden JPanel nach clearAll() und add neu zeichnen Java Basics - Anfänger-Themen 1
T Baum mit Turtle zeichnen Java Basics - Anfänger-Themen 2
C Hilfe beim Zeichnen Java Basics - Anfänger-Themen 8
D Haus zeichnen Java Basics - Anfänger-Themen 4
K Methoden Objekt auf JFrame zeichnen Java Basics - Anfänger-Themen 16
H 27 Kreise Zeichnen Java Applet Java Basics - Anfänger-Themen 2
S Problem mit "Zeichnen auf Kommando" Java Basics - Anfänger-Themen 2
M Double Punkte Zeichnen Java Basics - Anfänger-Themen 7
S Funktionen zeichnen Java Basics - Anfänger-Themen 2
2 Bild auf JApplet zeichnen Java Basics - Anfänger-Themen 18
R 2D Grafik zeichnen Java Basics - Anfänger-Themen 4
F Line zeichnen und Werte ändern Java Basics - Anfänger-Themen 6
B Grafik zeichnen Java Basics - Anfänger-Themen 25
B Erste Schritte Weihnachtsbaum zeichnen Java Basics - Anfänger-Themen 6
N Per Button Kreis zeichnen Java Basics - Anfänger-Themen 8
T mehrere Punkte zeichnen ohne löschung Java Basics - Anfänger-Themen 4
J Für 3 Sekunden etwas bestimmtes zeichnen Java Basics - Anfänger-Themen 8
C Kreis nach Mausklick zeichnen Java Basics - Anfänger-Themen 5
C Auf Button-Druck zeichnen Java Basics - Anfänger-Themen 2
R Methoden Zeichnen auf Button-Druck durch Paint-Methode Java Basics - Anfänger-Themen 2
D Klassen Zeichnen von Figuren mittels vorgegebener Klasse Java Basics - Anfänger-Themen 3
J Schachbrett zeichnen Java Basics - Anfänger-Themen 9
J Innerhalb der Border zeichnen Java Basics - Anfänger-Themen 9
J Hoher Speicherverbrauch beim Zeichnen von Images aus einer ArrayList Java Basics - Anfänger-Themen 10
A Blitze mit Linien zeichnen Java Basics - Anfänger-Themen 15
U Kreis um Textfelder zeichnen Java Basics - Anfänger-Themen 4
R Balkendiagramm zeichnen Java Basics - Anfänger-Themen 14
J Bild anhand von Koordinaten zeichnen Java Basics - Anfänger-Themen 10
B GUI Parkplatz zeichnen Java Basics - Anfänger-Themen 10
S Mehrere Zeichnungen zeichnen Java Basics - Anfänger-Themen 16
A Linie Zeichnen Applet mit Double Wert Java Basics - Anfänger-Themen 3
F Image übertragen und zeichnen Java Basics - Anfänger-Themen 8
P Funktion zeichnen Java Basics - Anfänger-Themen 6
Q Zeichnen außerhalb der paint-methode Java Basics - Anfänger-Themen 7
F zeichnen in JPanel Java Basics - Anfänger-Themen 7
T Transparente Bilder mit Graphics zeichnen Java Basics - Anfänger-Themen 17
T Sterne zeichnen Java Basics - Anfänger-Themen 4
M Bilder laden und zeichnen Java Basics - Anfänger-Themen 3
G Polygon in Frame zeichnen Java Basics - Anfänger-Themen 3
S X Zeichnen als Muster ausgeben Java Basics - Anfänger-Themen 5
P Kurven zeichnen Java Basics - Anfänger-Themen 5
I dauerhaftes zeichnen Java Basics - Anfänger-Themen 3
H Zeichnen in JPanel Java Basics - Anfänger-Themen 8
W Funktions-Graphen "zeichnen" Java Basics - Anfänger-Themen 2
J Bilder auf Bilder zeichnen Java Basics - Anfänger-Themen 8
I Rechteck Zeichnen Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben