Striche auf ein Panel zeichnen

Status
Nicht offen für weitere Antworten.

jes3000

Mitglied
Hallo,
ich würde gerne auf dem Panel im unten stehenden Programm mehrere Striche ausgeben
und weiß aber nicht wie ich das Programm mit
dem Graphics g und einer g.drawLine( 10, 10, 100, 50 ); verbinden kann.
Hat jemand eine Idee wie ich das machen könnte?
Viele Grüße Jes

[HIGHLIGHT="Java"]import java.awt.*;
import java.awt.event.*;

public class Test3 extends Frame {
// Anfang Attribute
private Panel panel1 = new Panel(null);
// Ende Attribute

public Test3(String title) {
// Frame-Initialisierung
super(title);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) { System.exit(0); }
});
int frameWidth = 549;
int frameHeight = 433;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
Panel cp = new Panel(null);
add(cp);
// Anfang Komponenten

panel1.setBounds(160, 40, 297, 217);
cp.add(panel1);
// Ende Komponenten

setResizable(false);
setVisible(true);
}

// Anfang Methoden
// Ende Methoden

public static void main(String[] args) {
new Test3("Test3");
}
}[/HIGHLIGHT]
 
Zuletzt bearbeitet von einem Moderator:
Also erstmal solltest du diese Initialisierungen:

[HIGHLIGHT="Java"]panel = new Panel(null);[/HIGHLIGHT]

weglassen.
Wenn du in einem Panel etwas zeichnen möchtest, solltest du die
paintComponent-Methode dieses Panels überschreiben.

D.h. du machst dir eine Klasse:

[HIGHLIGHT="Java"]class MyPanel extends Panel{

public MyPanel(int xdim, int ydim){
setPreferredSize(new Dimension(xdim,ydim));
}

@Override
public void paintComponent(Graphics g){
super.paintComponent(g);

// hier malst du, zB g.drawLine(...)
}
}[/HIGHLIGHT]

und dein Frame hat dann als Attribut so ein Teil:

[HIGHLIGHT="Java"]private MyPanel panel;[/HIGHLIGHT]

im Konstruktor des Frames erzeugst du eine Instanz und legst sie aufs Frame:

[HIGHLIGHT="Java"]this.panel = new MyPanel(500,500);
this.add(this.panel);
this.pack();
[/HIGHLIGHT]

Mit dem Aufruf von

[HIGHLIGHT="Java"]this.panel.repaint();[/HIGHLIGHT]

kannst du die paintComponent-Methode ausführen lassen.
(Man ruft sie nicht direkt auf!)
 
Vielleicht hilft dir diese kleine Beispiel ein bisschen:

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

public class ZeichenTest extends JFrame {
  Container c;
  ZeichenPanel zp;
  
  //Konstruktor
  ZeichenTest() {
    c = getContentPane();
    
    zp = new ZeichenPanel();
    
    c.add(zp);
  }
  
  public static void main(String[] args) {
    ZeichenTest fenster = new ZeichenTest();
    fenster.setTitle("Zeichentest");
    fenster.setSize(500,500);
    fenster.setVisible(true);
    fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

//ZeichenPanel wird von JPanel abgeleitet
class ZeichenPanel extends JPanel {
  @Override
  protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    
    g.drawLine(50,50,150,80);
  }
}

*Edit: Gibts hier ein automatisches Syntaxhighliting?
 
Zuletzt bearbeitet:
Ja du musst nur schauen dass du den Code in Java-Code Tags packst.
Es gibt im Menu beim Posten 4 verschiedene Code-Tags.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben