Component einfügen in JPane

Status
Nicht offen für weitere Antworten.

Kaffeeknirps

Mitglied
Hallo,

Wie kann man eine Componente in eine JPane packen, die selber etwas zeichnen soll?
Ich möchte ein Anwendung, die aus einem Fenster besteht, zur Anzeige von Objekten über einem Gitter bringen.
Doch schon das Gitter stelltt sich nicht dar .. was mache ich denn falsch?
Und wie finde ich den "Nullpunkt" des mittleren JPanels, ich will die Objekte relativ dazu zeichnen.

Bitte schaut mal .. vielen Dank schonmal

Kaffeeknirps

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class testapp
extends JFrame
implements ActionListener, WindowListener, MouseListener
{
  public testapp()
  {
    super("nur ein Test");
    this.addWindowListener(this);
    this.addMouseListener(this);

    JPanel topMessage = new JPanel();     
    JLabel label = new JLabel("Ein Label");
    topMessage.add(label);
    topMessage.setBorder(BorderFactory.createEtchedBorder());
    getContentPane().add(topMessage, BorderLayout.NORTH);

    JPanel map = new JPanel();
    
    Gitternetz Gitter= new Gitternetz();
    map.add(Gitter);
    map.setBorder(BorderFactory.createEtchedBorder());
    getContentPane().add(map, BorderLayout.CENTER);
    
    JPanel ButtonPanel = new JPanel();
    
    JButton CloseButton = new JButton("Programm beenden");
    CloseButton.addActionListener(this);
    ButtonPanel.add(CloseButton);
    
    ButtonPanel.setBorder(BorderFactory.createEtchedBorder());
    getContentPane().add(ButtonPanel, BorderLayout.SOUTH);
       
  } 
  
  public static void main(String args[]) {
    testapp app = new testapp();
    app.pack();
    app.setLocation(100,100);
    app.setSize(500,500);
    app.setVisible(true);
  }

  public void windowClosing(WindowEvent e) {System.exit(0);}
  public void windowOpened(WindowEvent e) {}
  public void windowClosed(WindowEvent e) {}
  public void windowIconified(WindowEvent e) {}
  public void windowDeiconified(WindowEvent e) {}
  public void windowActivated(WindowEvent e) {}
  public void windowDeactivated(WindowEvent e) {}
  
  
  public void actionPerformed(ActionEvent event) {
    String command = event.getActionCommand();
    if (command.equals("Programm beenden")) {System.exit(0);}
  }
  
  public void mouseClicked(MouseEvent event) 
  {
    System.out.println(""+ event.getX() +" "+ event.getY());
  }
  
  public void mousePressed(MouseEvent event) {}
  public void mouseReleased(MouseEvent event) {}
  public void mouseEntered(MouseEvent event) {}
  public void mouseExited(MouseEvent event) {}

}

// Rechteck zeichnen
class Rechteck
    extends JComponent
{
  protected void paintComponent(Graphics g)
  {
    super.paintComponent(g);
    g.setColor(Color.white);
    g.drawRect(100,100,200,200);
  }
}

// Gitternetz zeichnen
class Gitternetz
    extends JComponent
{
  protected void paintComponent(Graphics g)
  {
    super.paintComponent(g);
    int width = getSize().width;
    int height = getSize().height;
    g.setColor(Color.gray);
    for (int i = 0; i < width; i += 20)
    {
      g.drawLine(i, 0, i, height);
    }
    for (int i = 0; i < height; i += 20)
    {
      g.drawLine(0, i, width, i);
    }    
  }
}
 

Mag1c

Top Contributor
Hi,

irgendwie muß da das FlowLayout des "JPanel map" schuld sein. Setze da mal ein BorderLayout und packe das Gitternetz in den CENTER, dann gehts.

Gruß
Mag1c
 

Kaffeeknirps

Mitglied
vielen Dank für den Tipp .. das funktioniert :D
Wie kann ich eigentlich mehrere Objekte in einem JPanel darstellen?
Ich habe das auch mit der Methode repaint bei swing noch nicht verstanden, wo füge ich die ein?

Code:
  Gitternetz Gitter= new Gitternetz();
    Rechteck r = new Rechteck();
    map.setLayout(new BorderLayout());
    map.add(Gitter, BorderLayout.CENTER);
    map.add(r, BorderLayout.CENTER);
    map.setBorder(BorderFactory.createEtchedBorder());
    getContentPane().add(map, BorderLayout.CENTER);

Ich möchte, dass das Rechteck r über dem Gitter liegt .. mit add fülle ich wohl das JPanel immer mit nur einem neuen Objekt, in meinem Buch und online finde ich leider nichts :(

Vielen Dank
Kaffeeknirps
 

Mag1c

Top Contributor
Hi,

na wenn es sich nicht um GUI-Komponenten handelt, kannst du die doch einfach auf das Graphics draufpinseln. Erst das Gitter und dann das Rechteck oben drauf. Das Rechteck muß dann natürlich kein JPanel oder sowas sein, sondern einfach eine geometrische Figur, die sich auf ein Graphics malen kann.
Wenn du gerne noch eine Trennung hast, kannst du auch dem Gitternetz als Kind-Komponente ein Canvas (oder meinetwegen auch ein JPanel) hinzufügen. Die muß dann einen durchsichtigen Hintergrund haben und zeichnet nur das Rechteck.

Gruß
Mag1c
 

Kaffeeknirps

Mitglied
vielen Dank.
hm .. eine Trennung müsste nicht sein, aber ich muss die Daten zum Zeichnen aus einem Vector holen und weiss nicht, wie ich den an paint(Graphics g) übergeben soll.

In meiner testapp habe ich einen Vector .. in der Methode paint brauche ich die Daten .. ich habe ein Brett vor dem Kopf, ausserdem erst einige Tage an Java. Das muss doch gehen, oder?

Erstelle ich eine neue Klasse und schreibe die paint nur um das Gitter darzustellen, dann verliere ich beim Einfügen eines Objekts dieser Klasse auch die Möglichkeit auf Mausereignisse zu reagieren.

Hast Du einen Tipp, wie ich das geschickt anstellen kann?

Kaffeeknirps
 

Mag1c

Top Contributor
Hi,

also entweder du übergibst die Daten (Vector o.ä.) an die Zeichenkomponente (Gitternetz) im Konstruktor oder in einer set-Methode. Die zweite Möglichkeit wäre, nicht die Daten selbst zu übergeben, sondern ein definiertes Objekt, welches die Daten liefern kann.

Im paint(...) holst du dann alle zu zeichnenden Daten und rufst an den Objekten eine von dir zu implementierende Methode. Wenn es alles Rechtecke sind, dann z.B. so:

Code:
public void paint (Graphics g) {
    ...
    Rechteck r = (Rechteck) vector.get(i);
    r.zeichne(g);
    ...
}

falls du verschiedene Objekttypen hast, kannst du das ganze z.B. über ein Interface lösen:

Code:
public interface Drawable {
    public void zeichne (Graphics g);
}

public class Rechteck implements Drawable {
    ...
}


public void paint (Graphics g) {
    ...
    Drawable d = (Drawable) vector.get(i);
    d.zeichne(g);
    ...
}

Ich habe mal die Methode bewusst zeichne(...) genannt um einer Verwechslung mit bestehenden paint- oder draw-Methoden vorzubeugen.

Gruß
Mag1c
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
C Swing Component bei Doppelklick löschen AWT, Swing, JavaFX & SWT 4
R Swing Hat mein JFrame meinen Component? AWT, Swing, JavaFX & SWT 2
R Layout Manager null und Component wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 3
B Größe der Parent-Component dynamisch an children anpassen AWT, Swing, JavaFX & SWT 30
K JavaFX Component Größe an Inhalt anpassen AWT, Swing, JavaFX & SWT 11
M Swing Component Resize AWT, Swing, JavaFX & SWT 7
L Eigene Component anordnen AWT, Swing, JavaFX & SWT 7
L Eigene Component Layout AWT, Swing, JavaFX & SWT 4
W Swing Component mehrfach adden AWT, Swing, JavaFX & SWT 0
H Drag component out of window AWT, Swing, JavaFX & SWT 1
A remove(Component) funktioniert nicht; JTable AWT, Swing, JavaFX & SWT 4
A Swing Focus auf gemalte Component AWT, Swing, JavaFX & SWT 5
L Swing Component alignment innerhalb einer JList AWT, Swing, JavaFX & SWT 3
M AWT Drag n Drop-Support für Component AWT, Swing, JavaFX & SWT 5
M Kein resize nach Component.setVisible() AWT, Swing, JavaFX & SWT 2
Ebenius AWT Bug in Component.getLocationOnScreen() AWT, Swing, JavaFX & SWT 7
C AWT Fokus von Component entfernen, wenn kein anderes vorhanden AWT, Swing, JavaFX & SWT 4
B JTable Component mit String? AWT, Swing, JavaFX & SWT 4
M Eigenes Panel aus Component? AWT, Swing, JavaFX & SWT 5
H Component Zerren AWT, Swing, JavaFX & SWT 5
S Swing Component vertikal und hochizontal zentrieren? AWT, Swing, JavaFX & SWT 5
Z Component für File-Browser ähnliche Oberfläche AWT, Swing, JavaFX & SWT 6
B Swing verschachteltes GUI: repaint() ändert mehr als nur gewünschte Component AWT, Swing, JavaFX & SWT 4
V Swing remove(Component) blockiert Thread sehr lange. AWT, Swing, JavaFX & SWT 6
C Problem mit remove(Component comp) AWT, Swing, JavaFX & SWT 23
F AWT Component in OpenGL anzeigen? AWT, Swing, JavaFX & SWT 18
A Java Konsolen Component AWT, Swing, JavaFX & SWT 6
G Swing Component.toString() was bedeutet flags AWT, Swing, JavaFX & SWT 8
1 Eigene Component in JScrollBar + fixe Linien??? AWT, Swing, JavaFX & SWT 2
DamienX Swing Component auf mehreren Containern AWT, Swing, JavaFX & SWT 2
algorismi AWT Tranparente heavyweight component AWT, Swing, JavaFX & SWT 2
R Swing Methode add([Component]) funzt nich AWT, Swing, JavaFX & SWT 7
Developer_X AWT Component added keinen MouseListener AWT, Swing, JavaFX & SWT 7
U LayoutManager [GBL] Component aus einer Zelle löschen AWT, Swing, JavaFX & SWT 2
H Swing Illegal component position! AWT, Swing, JavaFX & SWT 2
C Flamingo Component AWT, Swing, JavaFX & SWT 2
M Doppelklick auf Component abfangen AWT, Swing, JavaFX & SWT 5
P DragAndDrop zw Component und Container AWT, Swing, JavaFX & SWT 4
M AWT Component/Canvas erzeugt unerwünschten Rahmen bei paint AWT, Swing, JavaFX & SWT 3
T Swing Component in Graphics zeichnen AWT, Swing, JavaFX & SWT 4
R Zugriff auf Component um addComponentListener() aufzurufen AWT, Swing, JavaFX & SWT 4
K AWT/SWING intern - Wie funktioniert die Component-Ermittlung AWT, Swing, JavaFX & SWT 13
S Line Component in SWING AWT, Swing, JavaFX & SWT 2
S java.awt.Component und paint() AWT, Swing, JavaFX & SWT 4
hdi Verständnisfrage: Container vs. Component AWT, Swing, JavaFX & SWT 3
D Eigene Component erstellen? AWT, Swing, JavaFX & SWT 4
C Syntax Highlighting Component AWT, Swing, JavaFX & SWT 2
O KeyBoardFocusManager - previous und next Component checken? AWT, Swing, JavaFX & SWT 2
A Eigene, sich selbst zeichnende Component AWT, Swing, JavaFX & SWT 5
A erneutes Öffnen jInternalFrame: illegal component position AWT, Swing, JavaFX & SWT 4
0 Component austauschen und aktualisieren ? AWT, Swing, JavaFX & SWT 6
S Thread beenden, wenn Component nicht mehr benötigt wird AWT, Swing, JavaFX & SWT 12
G "Rating Component" - Bewerten über JTable AWT, Swing, JavaFX & SWT 3
G Drag And Drop von Component (List, Tree) zum Desktop AWT, Swing, JavaFX & SWT 2
F LayoutManager und Component.setVisible(boolean) AWT, Swing, JavaFX & SWT 2
P Component ändern (repaint) AWT, Swing, JavaFX & SWT 9
F Probleme bei add(Component) JPanel > JFrame AWT, Swing, JavaFX & SWT 3
B Component AWT, Swing, JavaFX & SWT 5
L Swing Component in Buffered Image AWT, Swing, JavaFX & SWT 6
G Component "finden" AWT, Swing, JavaFX & SWT 6
H Component fokussierbar machen AWT, Swing, JavaFX & SWT 2
P Wie das Component Object des Hauptfensters ermitteln? AWT, Swing, JavaFX & SWT 4
M GridBagLayout - Component Position AWT, Swing, JavaFX & SWT 4
R Component einer Form herausbekommen AWT, Swing, JavaFX & SWT 3
T JMenu/JMenuItem Component auf der geaddet wurde AWT, Swing, JavaFX & SWT 16
B Component in JSplitPane aktualisieren AWT, Swing, JavaFX & SWT 2
G add(Component) in paintComponent erlaubt ? AWT, Swing, JavaFX & SWT 2
M getSize von Component und ModelListener AWT, Swing, JavaFX & SWT 2
S Component auf Label zeichnen? AWT, Swing, JavaFX & SWT 3
R convertPointToScreen(Point p, Component c) AWT, Swing, JavaFX & SWT 5
R Component aus Container entfernen bzw. austauschen. AWT, Swing, JavaFX & SWT 6
C JPanel Component austauschen AWT, Swing, JavaFX & SWT 4
T Hintergrundbild einfügen AWT, Swing, JavaFX & SWT 1
S Swing Coding richtig einfügen AWT, Swing, JavaFX & SWT 3
ExceptionOfExpectation MouseListener-Objekte zu den Graphics-Objekten einfügen AWT, Swing, JavaFX & SWT 3
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
Ø Ein FXML-File mehrfach einfügen AWT, Swing, JavaFX & SWT 6
G Z Buffer / Depth Buffer in Bufferstrategy einfügen AWT, Swing, JavaFX & SWT 1
H Tabelle in JFrame einfügen AWT, Swing, JavaFX & SWT 1
P Swing Icon einfügen wirft eine Fehlermeldung AWT, Swing, JavaFX & SWT 3
Kirby.exe Bilder in GUI einfügen AWT, Swing, JavaFX & SWT 8
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
Hatsi09 Swing JPanel Bild einfügen AWT, Swing, JavaFX & SWT 14
T JFrame Bild einfügen AWT, Swing, JavaFX & SWT 9
K TreeTableView (cellFactory) - wie Daten in Spalten einfügen AWT, Swing, JavaFX & SWT 0
A Swing JPanels dynamisch untereinander einfügen AWT, Swing, JavaFX & SWT 3
L Kalendar als JLabel einfügen AWT, Swing, JavaFX & SWT 3
Q-bert JTextField per Mausklick einfügen AWT, Swing, JavaFX & SWT 3
G Wie Scrollbar einfügen? AWT, Swing, JavaFX & SWT 1
Kanda Sorata Inhalt einer .txt Datei einlesen und in ein Label einfügen (JavaFX) AWT, Swing, JavaFX & SWT 2
D Icon in Menuitem einfügen AWT, Swing, JavaFX & SWT 8
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
MrSnake Bilder aus Unterordner einfügen AWT, Swing, JavaFX & SWT 2
U Java FX Zusätzliches Label per Knopfdruck während der Laufzeit auf Panel einfügen. AWT, Swing, JavaFX & SWT 2
S NetBeans, Panel in Frame einfügen AWT, Swing, JavaFX & SWT 3
F neuen Menüpunkt in jcombobox einfügen AWT, Swing, JavaFX & SWT 1
L Swing Datensätze aus DB in jTable einfügen AWT, Swing, JavaFX & SWT 2
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
A Swing Externe Klassen aufrufen und in einem bereits vorhandenen Container einfügen AWT, Swing, JavaFX & SWT 0

Ähnliche Java Themen

Neue Themen


Oben