Zeichnung in Container

Hdr

Mitglied
Hallo,
in meinem Programm soll mehrfach die gleiche Zeichnung verwendet werden.
In Visual Basic habe ich in diesem Fall die Zeichnung in einen Container verpackt und konnte diesen dann zusammen mit der Zeichnung nach Belieben vervielfachen oder verschieben.
In Java will es mir nicht gelingen, eine Zeichnung (z.B. mit drawLine, fillRect usw) innerhalb eines Containers (Canvas, Panel, JPanel, alles probiert) auszuführen. Die Befehle werden einfach nicht angenommen und in den Tutorials steht nichts dazu.
Weiß jemand Rat ?
 
Jap Code wäre nett, weil du das auf mehrer Arten machen kannst. So wie du klingst solltest du aber eine eigene Klasse zB MeineZeichnung extends JPanel erstellen wenn du das Ganze öfter nutzten willst.
Geht natürlich auch inline ohne eignene Klasse für einmalige Aktionen.

Z.B. so:
Java:
package fractalator.main.surface.components;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;

public class MeineZeichnung extends JPanel {

    /**
     * Create the panel.
     */
    public MeineZeichnung() {

    }
   
    /**
     * Add Graphics
     */
   
    public void paint(Graphics g) {
        g.setColor(Color.RED);
        g.fillRect(0, 0, this.getWidth(), this.getHeight());
    }

}
 
Danke, ich werde es pobieren. Zur Zeit habe ich aber die Schwierigkeit, dass ich schon das JPanel nicht auf dem Bildschirm dargestellt kriege. Die von Eclipse gemalten JPanels haben einen ganz anderen Quellcode und sind für draw.... usw Befehle unzugänglich.
 
Eigentlich nicht O.O Was genau möchtest du den Zeichenen? 2D dann wechsel zu Graphics2D dann spricht das Panel auch auf setStroke() (Linienstärke) und drawLine und co.

Hier Beispiel Frame, habe das Ganze aber jetzt inline gemacht. Wenn du das Panel öfter verwendeln willst würde ich wie oben schon gesagt/gezeigt ne extra Klasse aufmachen.
Java:
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class MeinTestFrame extends JFrame {

    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MeinTestFrame frame = new MeinTestFrame();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public MeinTestFrame() {
       
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
       
        //Panel (du musst es nicht als contentPane verwenden, dass ist jetzt nur hier so)
        contentPane = new JPanel(){
            public void paint(Graphics g) {
                //Simpel einfach rotes Panel
                g.setColor(Color.RED);
                g.fillRect(0, 0, this.getWidth(), this.getHeight());
               
                //g.drawImage(Image, x, y, this)
               
                Graphics2D g2 = (Graphics2D) g;
               
                //Linienstärke
                g2.setStroke(new BasicStroke(10.0f));
               
                //graues ungefülltes Rechteck
                g2.setColor(Color.GRAY);
                g2.drawRect(40, 40, 100, 100);
               
            }
        };
       
        contentPane.setLayout(null);
        setContentPane(contentPane);
    }

}
 
Danke sehr für Deine Mühe !
Klappt aber immer noch nicht...auf dem Fenster ist gar nichts zu sehen.
Ich habe Deinen Quelltext Buchstabe für Buchstabe abgetippt und nur die Abmessungen des Frames vergrößert. Bitte, wo liegt der Fehler ?
 
Das Hochladen hat wohl nicht geklappt, ich versuchs noch mal.
....Als TestFrame.java wird es nicht angenommen und als Testframe.txt ist es nicht lesbar.
Wie ladet Ihr Eure Dateien hoch ?
 

Anhänge

Wie ladet Ihr Eure Dateien hoch ?
Gar nicht - benutze bitte [code=Java]MY CODE[/code] Tags um deinen Code zu teilen. So kann man ihn auch zitieren 🙂

Ich habe Deinen Quelltext Buchstabe für Buchstabe abgetippt und nur die Abmessungen des Frames vergrößert. Bitte, wo liegt der Fehler ?
Das kann nicht sein.
Bei deinem Code fehlen wesentliche Zeilen was auch der Grund ist, dass nix angezeigt wird.
Der eigentlich Grund ist, dass du dein JPanel nirgendswo zu deinem JFrame hinzufügst.

Java:
JFrame f = new JFrame();
f.setSize(500, 500);
f.add(jpanel);

Die add() Methode fügst Komponenten hinzu. Damit solltest du dein JPanel deinem JFrame hinzufügen.


Off-Topic:
Kurze Anmerkung zu deinem / @Joker4632 seinem Code:
- Lass deine Klasse nicht von JFrame erben wenn du die Funktionalität nicht erweitern willst. Erstell lieber ein JFrame Object in deiner Klasse als globale Variable.
- Benutze nicht das null-Layout. Nutze lieber einen LayoutManager.
- Damit verbunden solltest du auch nicht die setBounds() Methode verwenden. Um die Größe eines JFrames zu verändern / setzen benutze die

Java:
setPreferredSize(Dimension d);
setMaximumSize(Dimension d);
setMinimumSize(Dimension d);

Methoden.

Gruß Robert
 

Zurück
Oben