Kreise Rechtecke

pulse

Mitglied
Hallo,

bin Java-Anfänger und stehe vor einem Problem. Ich möchte eine Matrix in einer GUI ausgeben, wobei die Matrix in Form von Kreisen oder Rechtecken ausgegeben werden soll. Die Eingabe von Reihen und Spalten klappt schon. Aber nach einem Klick soll dann die Matrix erscheinen. Leider schluckt Component keine Graphic Objekte. Hat hier jemand einen Tip oder weiß wie man das löst?
[Java]import java.awt.*;

import javax.swing.JFrame;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
import java.awt.dnd.*;
import java.util.Vector;
import javax.swing.*;



public class PaintMatrix extends JFrame{
final int FRAME_WIDTH = 910;
final int FRAME_HEIGHT = 660;
final int X_OFFSET = 40;
final int Y_OFFSET = 40;

Ellipse2D.Double kreis;
JTextField spalten;
JTextField reihen;
JComboBox j;
int maxReihen;
int maxSpalten;
String[]menue= {"Kreise", "Rechtecke"};

public PaintMatrix(){
init();
}

public void init(){
setBackground(Color.WHITE);
setLocation(X_OFFSET, Y_OFFSET);
setSize(FRAME_WIDTH, FRAME_HEIGHT);
setTitle("PaintMatrix");
getContentPane().setLayout(null);
setDefaultLookAndFeelDecorated(true);
j= new JComboBox(menue);
j.setBounds(530+150, 240, 100, 25);
SubmitButton s= new SubmitButton("OK");
s.setBounds(530+150, 200, 100, 25);
spalten = new JTextField("spalten");
spalten.setBounds(530,200, 140, 25);
reihen= new JTextField("reihen");
reihen.setBounds(530,230, 140, 25);
kreis= new Ellipse2D.Double(15,40,10,10);

this.add(s);
this.add(spalten);
this.add(reihen);
this.add(j);


repaint();
}

class SubmitButton extends JButton implements ActionListener{
public SubmitButton(String title){
super(title);
addActionListener(this);
}

@Override
public void actionPerformed(ActionEvent e) {

maxReihen=Integer.parseInt(reihen.getText());
maxSpalten=Integer.parseInt(spalten.getText());


System.out.println(maxReihen);
spalten.removeAll();
reihen.removeAll();
for(int i=0;i<maxReihen;i++){
for(int j=0;j<maxSpalten;j++){

}
}



}
}
public void paint(Graphics g){
super.paint(g);
Graphics2D g2D=(Graphics2D)g;

g2D.draw(kreis);


g.setColor(Color.white);
g.fillRect(100,100, 20, 20);


}
}[/Java]
 

Marco13

Top Contributor
Das Zeichnen sollte lieber in einer eigenen Klasse gemacht werden, die von JPanel erbt, und bei der dann nicht paint sondern paintComponent überschrieben ist (einem JFrame sollte man nicht ins Zeichnen reinpfuschen). Diese Klasse könnte dann eine Methode haben
Java:
void jetztZeichneDasDingAberAuchMal(boolean echt)
{
    this.zeichneDasDing = echt;
    repaint();
}
Die methode wird mit dem Buttonklick aufgerufen und "zeichneDasDing" wird auf 'true' gesetzt. In der paintComponent kann dann abgefragt werden, ob die Matrix gezeichnet werden soll.
 

André Uhres

Top Contributor
Hallo pulse,

wir sollten uns angewöhnen mit Layoutmanagern zu arbeiten:
Java:
getContentPane().setLayout(new FlowLayout());
Durch obige Zeile können wir sämtliche "setBounds" rausnehmen:
Java:
//j.setBounds(530 + 150, 240, 100, 25);
SubmitButton s = new SubmitButton("OK");
//s.setBounds(530 + 150, 200, 100, 25);
spalten = new JTextField("spalten");
//spalten.setBounds(530, 200, 140, 25);
reihen = new JTextField("reihen");
//reihen.setBounds(530, 230, 140, 25);
Bevorzugte Größen der Komponenten lassen sich über setPreferredSize anpassen, zum Beispiel:
Java:
spalten.setPreferredSize(new Dimension(140, 25));
Der Vorteil dieser Vorgehensweise besteht darin, dass das Layout sich bei Größenveränderungen dynamisch anpassen kann. Siehe auch: Using Layout Managers (The Java™ Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container)

Diese Zeilen sind ebenfalls überflüssig:
Java:
repaint();
...
spalten.removeAll();
reihen.removeAll();

Eine kurze Einführung in das Malen mit Swing findest du hier: Malen in Swing Teil 1: der grundlegende Mechanismus - Byte-Welt Wiki

Gruß,
André
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Hough-Transformation für Kreise und andere Formen AWT, Swing, JavaFX & SWT 3
G AWT AWT Kreise permanent anzeigen AWT, Swing, JavaFX & SWT 3
C JavaFX mehrere Kreise nach Eingabeprozess ausgeben AWT, Swing, JavaFX & SWT 2
P Bestimmte Kreise färben AWT, Swing, JavaFX & SWT 3
wolfgang63 JavaFX Animation, Kreise im vorgegebem Takt durchs Fenster laufen lassen AWT, Swing, JavaFX & SWT 3
J Swing Bild laden, Kreise drin malen, Schreiben AWT, Swing, JavaFX & SWT 2
M Kreise zeichnen AWT, Swing, JavaFX & SWT 6
U Swing Generierung mehrerer Kreise per MouseListener AWT, Swing, JavaFX & SWT 16
E Swing Rechteck und Kreise verschieben AWT, Swing, JavaFX & SWT 3
M Kreise anklicken (Farbänderung) AWT, Swing, JavaFX & SWT 2
G Swing Kreise auf JPanel zeichnen AWT, Swing, JavaFX & SWT 11
1 GeneralPath-Kreise werden keine Kreise AWT, Swing, JavaFX & SWT 2
M In einem JLabel Kreise zeichnen AWT, Swing, JavaFX & SWT 4
ronbot77 JavaFX Rechtecke werden nicht neu gezeichnet AWT, Swing, JavaFX & SWT 8
J Rechtecke mittels getWidth AWT, Swing, JavaFX & SWT 1
C 2D-Grafik Steganographie - Verschlüsselung von Dateien in Bildern - Bilder zeigen schwarze Rechtecke AWT, Swing, JavaFX & SWT 13
M Rechtecke drehen AWT, Swing, JavaFX & SWT 15
T Rechtecke zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 3
3 2D-Grafik Rechtecke auf Bilder legen und auslesen AWT, Swing, JavaFX & SWT 4
A Kollisionsabfrage schiefer Rechtecke AWT, Swing, JavaFX & SWT 5
M Rechtecke auf Bild zeichnen AWT, Swing, JavaFX & SWT 9
D Rechtecke verschieben? AWT, Swing, JavaFX & SWT 2
N Autos (Rechtecke) in zufälligen Abständen von fahren lassen AWT, Swing, JavaFX & SWT 7
G Rechtecke beschriften AWT, Swing, JavaFX & SWT 3
F Zeichenbrett für Rechtecke mit Hindernissen AWT, Swing, JavaFX & SWT 17

Ähnliche Java Themen

Neue Themen


Oben