Und schon wieder die Linien (Problem beim überzeichnen)

Status
Nicht offen für weitere Antworten.

Zallesandro

Neues Mitglied
Hallo ich wollte mit meinem Programm ein Linien zeichen, wo Linien gezogen werden können, vergleichbar zum Konstruktionstool in Word, um halt später damit Analysen durchführen zu können. Das funktioniert zwar wunderbar aber nur für eine Linie :) Hab mich schon hier durchgeblättert im Forum nur bin ich nicht schlauer geworden :###
Hier ist erstmal der Code, ich benutze eine Canvasoberfläche zum Zeichnen:
Code:
public class MyCanvas extends Canvas implements MouseListener,
        MouseMotionListener {
int width, height;
private Point p1, p2;
Graphics MyGraphics;
MyCanvas(int width, int height) {
        this.width = width;
        this.height = height;
        reshape(0, 0, width, height);
        addMouseListener(this);
        addMouseMotionListener(this);

    }
 public void paint(Graphics g) {
        MyGraphics = getGraphics();

        if (p1 != null && p2 != null) {
            Graphics2D g2d = (Graphics2D) g;
            g2d.setStroke(stroke);
            g2d.drawLine(p1.x, p1.y, p2.x, p2.y);
            //Anzeigen der Nummer: aus Array...
            g2d.drawString("Nr. xx", p2.x + 10, p2.y + 10);
        }
    }
public void mousePressed(MouseEvent e) {
        //Durch drücken wird der erste Punkt geholt
        p1 = e.getPoint();
    }public void mouseDragged(MouseEvent e) {
        //Solange Maus gehalten, wird gezeichnet
        p2 = e.getPoint();
        this.update(MyGraphics);
    }
Das Problem ist das die ganze Oberfläche jedesmal neu gezeichnet wird, sobalg die Maus gezogen wird. das update brauch ich da sonst sehr viele linien gezeichnet werden. Hab mir überlegt die Linien in ein Vektor oder einen Baum zu packen und die dann immer zeichnen zulassen,da ich eh eine Zwischenspeicherung brauche, um die Nummer der Linie anzeigen zu lassen. Stehe aber irgendwie auf dem Schlauch.
 

Marco13

Top Contributor
Was du da mit dem "MyGraphics" machst ist so nicht richtig. Du solltest in mouseDragged NUR repaint aufrufen.
 

Zallesandro

Neues Mitglied
Ich will ja die linie beim Zeichnen auch sehen, wenn ich halt nur repaint bei mouse dragged einsetze, zeichnet er zwar die Linie beim loslassen, nur bewege ich die Maus "blind". Speichere jetzt die Punkte p1 und p2 in einem Array ab mit denen ich in der Paintmethode dann wieder die Linien neu zeichne. Weiß vllt jemand einen besseren weg, denn ich will auf diese Linien später im Code noch zugreifen können.

Code:
Point[] erster;
Point[] zweiter;

public void addGraphik(Point p1, Point p2) {
        erster[zaehler] = p1;
        zweiter[zaehler] = p2;
}
public void printGraphic() {
        for(int i=0;i<zaehler;i++) {
            MyGraphics.drawLine(erster[i].x, erster[i].y, zweiter[i].x,
                                zweiter[i].y);
            MyGraphics.drawString("Nr. "+(i+1), zweiter[i].x + 10, zweiter[i].y + 10);
}
Der Zähler wird beim loslassen hochgesetzt und falsche "Klicks" (wenn jemand wild durch die gegend klickt) abgefangen. Danke
 

Marco13

Top Contributor
Erstmal vorneweg: repaint reicht
Code:
import java.awt.*;
import java.awt.event.*;



public class MyCanvas extends Canvas implements MouseListener,
        MouseMotionListener {

public static void main(String args[])
{
    Frame f = new Frame();
    f.add(new MyCanvas(400,400));
    f.setSize(400,400);
    f.setVisible(true);
}

int width, height;
private Point p1, p2;
MyCanvas(int width, int height) {
        this.width = width;
        this.height = height;
        reshape(0, 0, width, height);
        addMouseListener(this);
        addMouseMotionListener(this);

    }
public void paint(Graphics g) {

        if (p1 != null && p2 != null) {
            Graphics2D g2d = (Graphics2D) g;
            //g2d.setStroke(stroke);
            g2d.drawLine(p1.x, p1.y, p2.x, p2.y);
            //Anzeigen der Nummer: aus Array...
            g2d.drawString("Nr. xx", p2.x + 10, p2.y + 10);
        }
    }
public void mousePressed(MouseEvent e) {
        //Durch drücken wird der erste Punkt geholt
        p1 = e.getPoint();
    }
    public void mouseDragged(MouseEvent e) {
        //Solange Maus gehalten, wird gezeichnet
        p2 = e.getPoint();
        repaint();
    }

public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseMoved(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}


}

Zur eigentlichen Frage: Funktionieren tut das ja mit den zwei Punkten - es ist nur nicht besonders schön. Du könntest eine Klasse "Line" erstellen, die zwei Punkte enthält. Die Linien kannst du dann in einer ArrayList<Line> speichern. Da kanst du sie auch einfach hinzufügen, und musst nicht am Anfang eine feste Arraygröße vorgeben.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java anwendung VOR vollbildspielen (schon wieder...) AWT, Swing, JavaFX & SWT 5
C Schon wieder JTable AWT, Swing, JavaFX & SWT 7
S ProgressBar newRunnable (schon wieder!) AWT, Swing, JavaFX & SWT 9
P schon wieder schlange AWT, Swing, JavaFX & SWT 8
B Schon wieder ein Problem mit paintComponent(). AWT, Swing, JavaFX & SWT 2
K Und schon wieder JInternalFrame AWT, Swing, JavaFX & SWT 2
dzim JetBrains Compose - hat das schon jemand probiert? AWT, Swing, JavaFX & SWT 3
B Swing Locale wechseln, nachdem UIManager schon initialisiert ist AWT, Swing, JavaFX & SWT 5
Binary.Coder Netbeans GUI zu Eclipse (schon gegooglet und einiges ausprobiert). AWT, Swing, JavaFX & SWT 4
N JComboBox schon zum Teil aufgeklappt AWT, Swing, JavaFX & SWT 7
J Swing - ich sehe keine Linie, andere schon AWT, Swing, JavaFX & SWT 6
GilbertGrape JTable mit Combobox-Editierung schon nach einem Klick AWT, Swing, JavaFX & SWT 7
oliver1974 Wer hat QT Jambi schon probiert? AWT, Swing, JavaFX & SWT 5
M Ist Swing schon fertig? AWT, Swing, JavaFX & SWT 3
F SkinLF - GTK Icons werden nicht genutz - KDE schon - why? AWT, Swing, JavaFX & SWT 8
D Prüfen, ob Fenster bereits schon geöffnet ist AWT, Swing, JavaFX & SWT 1
richis-fragen Wie kann man den RowSorter dazu bringen die ursprünglich liste wieder anzuzeigen. AWT, Swing, JavaFX & SWT 28
J Eingaben aus Textfield & ComboBox speichern und in ComboBox wieder ausgeben AWT, Swing, JavaFX & SWT 3
B Text mit Absatz + OK-Button, der Fenster wieder schließt AWT, Swing, JavaFX & SWT 7
J JOptionPane ruft sich selbst immer wieder neu auf AWT, Swing, JavaFX & SWT 3
R JOptionPane schließt sich nicht wieder AWT, Swing, JavaFX & SWT 2
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
C Memory Karten nach Paar offen bleiben sonst wieder umdrehen AWT, Swing, JavaFX & SWT 1
C Benutzername in GUI eingeben und nach Spiel neues Fenster Benutzername wieder anzeigen AWT, Swing, JavaFX & SWT 1
T SWT Mysql Tabelle zeigt immer nur den ersten Wert immer wieder an AWT, Swing, JavaFX & SWT 3
X AWT Text der mit Graphics "drawString(...)" geschreiben wurde wieder löschen. AWT, Swing, JavaFX & SWT 6
F Swing Java Swing Array in Datei und wieder raus AWT, Swing, JavaFX & SWT 7
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
P jframe setVisible(false) wieder sichtbar machen? AWT, Swing, JavaFX & SWT 4
B Swing Repaint Problem - mal wieder AWT, Swing, JavaFX & SWT 5
A jformattedtextfield unsichtbar und wieder sichtbar machen AWT, Swing, JavaFX & SWT 13
J Swing Fenster lässt sich nach Schließung nicht wieder öffnen AWT, Swing, JavaFX & SWT 4
O JTable zeigt die alte Daten wieder AWT, Swing, JavaFX & SWT 23
A AWT Nach dem generieren von bildern verschwinden diese wieder AWT, Swing, JavaFX & SWT 9
J Mal wieder Probleme mit paintComponent AWT, Swing, JavaFX & SWT 3
C SWT CTabItem wieder sichtbar machen AWT, Swing, JavaFX & SWT 3
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
R Komponente wieder entfernen AWT, Swing, JavaFX & SWT 13
E wieder einmal JTable AWT, Swing, JavaFX & SWT 5
A Fokus wieder in ein JTextField setzen AWT, Swing, JavaFX & SWT 4
L Buttons aus Arrayliste erstellt wie komm ich nun wieder an das Oobjekt aus der arrayliste ran AWT, Swing, JavaFX & SWT 3
Z Swing Buttons wieder entfernen vom Bildschirm AWT, Swing, JavaFX & SWT 5
O Swing JButton werden richtig gewechselt aber die Maus macht die alten wieder Sichtbar?? AWT, Swing, JavaFX & SWT 5
N gezeichnete Graphiken speichern und wieder anzeigen AWT, Swing, JavaFX & SWT 8
hdi SWT Operation auf GUI-Komponente kommt mal wieder nicht an... AWT, Swing, JavaFX & SWT 9
Ollek Swing JPnales nach bestimmtenVorgang wieder anzeigen AWT, Swing, JavaFX & SWT 4
P Swing Hintergrundfarbe auslesen und wieder setzen AWT, Swing, JavaFX & SWT 4
M AWT Zurücksetzbutton, wieder auf das original Bild AWT, Swing, JavaFX & SWT 3
M Fenster nach minimierung zum tray wieder öffnen AWT, Swing, JavaFX & SWT 3
E Swing Wieder ein Bild einfügen AWT, Swing, JavaFX & SWT 2
Luy Per TAB-Taste aus TextArea wieder raus? AWT, Swing, JavaFX & SWT 5
D Swing JMenu wieder schließen lassen AWT, Swing, JavaFX & SWT 7
F JFileChooser mal wieder AWT, Swing, JavaFX & SWT 2
B Wie kann ich ein event wieder beseitigen AWT, Swing, JavaFX & SWT 2
hdi Swing mal wieder EDT -> nichts passiert AWT, Swing, JavaFX & SWT 20
S Feintuning, mal wieder Threading + swing ... AWT, Swing, JavaFX & SWT 8
P JTable...mal wieder AWT, Swing, JavaFX & SWT 7
S JDialog startet immer wieder neu AWT, Swing, JavaFX & SWT 2
A Wie werde ich beim JTable die Selection wieder los? AWT, Swing, JavaFX & SWT 6
PAX Iconified JFrame per Code wieder anzeigen lassen (deiconify) AWT, Swing, JavaFX & SWT 2
T Mal wieder Swing GUI AWT, Swing, JavaFX & SWT 7
hdi repaint() mag mal wieder nicht. AWT, Swing, JavaFX & SWT 9
T JCheckBox deselektieren (Haken wieder entfernen) - wie? AWT, Swing, JavaFX & SWT 5
M ich will die alten "alte JButtons"wieder haben AWT, Swing, JavaFX & SWT 6
G Ein jTextField im laufe das Programmes immer wieder updaten AWT, Swing, JavaFX & SWT 2
G wieder mal das leidige thema listener AWT, Swing, JavaFX & SWT 3
G Drag and Drop mal wieder? AWT, Swing, JavaFX & SWT 2
C JTable. Mal wieder AWT, Swing, JavaFX & SWT 10
T Ich komme mal wieder nicht mit Swing und Image klar. AWT, Swing, JavaFX & SWT 5
G SWT Toolbar: Toolitem entfernen und wieder hinzufügen AWT, Swing, JavaFX & SWT 16
M wieder einmal JScrollPane und JList AWT, Swing, JavaFX & SWT 4
S getSize gibt keine Größe wieder AWT, Swing, JavaFX & SWT 4
T Linien zeichnen und wieder löschen AWT, Swing, JavaFX & SWT 9
V mal wieder das gute alte gridbaglayout AWT, Swing, JavaFX & SWT 4
W JTabele Aktualisieren - Wieder einmal AWT, Swing, JavaFX & SWT 4
S JScrollPane mal wieder AWT, Swing, JavaFX & SWT 2
R JLabel Icon wieder entfernen AWT, Swing, JavaFX & SWT 4
A Wieder einmal Event-Dispatch-Thread AWT, Swing, JavaFX & SWT 5
R Mal wieder JTable AWT, Swing, JavaFX & SWT 11
I JProgressBar String anzeigen, danach wieder normale Ansicht AWT, Swing, JavaFX & SWT 3
G mal wieder table. AWT, Swing, JavaFX & SWT 3
X wieder mal ein prob mit dnd AWT, Swing, JavaFX & SWT 14
Luma Alle Fenster verstecken und wieder sichtbar machen? AWT, Swing, JavaFX & SWT 6
S JFrame minimieren und wieder herstellen AWT, Swing, JavaFX & SWT 2
J Spalte in JTable aus- und wieder einblenden AWT, Swing, JavaFX & SWT 10
R Anonymen CaretListener wieder entfernen AWT, Swing, JavaFX & SWT 4
G JTabbedPane: Tabs verschwinden lassen und wieder anzeigen AWT, Swing, JavaFX & SWT 3
G TableModel von JTable wieder entfernen AWT, Swing, JavaFX & SWT 10
juppi JFrame will nicht wieder verschwinden AWT, Swing, JavaFX & SWT 2
S Wieder eine Frage zu javax.swing.text AWT, Swing, JavaFX & SWT 2
K Mehrere Linien zeichnen AWT, Swing, JavaFX & SWT 8
T Tic Tac Toe - GUI Linien zeichnen AWT, Swing, JavaFX & SWT 14
S Parallele Linien zeichnen AWT, Swing, JavaFX & SWT 5
J Linien auf JPanel zeichnen AWT, Swing, JavaFX & SWT 3
llabusch Linien in JPanel zeichnen AWT, Swing, JavaFX & SWT 6
V JFreechart: In Linechart Linien einzeichnen und Bereiche färben AWT, Swing, JavaFX & SWT 4
S 2D-Grafik MouseDragged Linien zeichnen AWT, Swing, JavaFX & SWT 4
M Zeichnen ohne vorherige Linien zu löschen AWT, Swing, JavaFX & SWT 2
I ContentPane lösche linien AWT, Swing, JavaFX & SWT 1
1 Buttons in Kombination mit Linien AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben