ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
1663
1663
EMPFEHLEN
-
Hi,
ich habe ein kleines Problem und hoffe jemand hier hat eine Lösung für mich.
Ich will ein Rechteck Zeichnen wenn mit gedrückter Maustaste über ein Panel zieht.
(drag)
Dies funktioniert auch wenn ich die Paint Methode überschreibe
Beispiel:
Ich will genau dieses Verhalten haben aber ohne das ich die "Paint Methode" überschreiben muss.Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class JPanSelectionTest extends JPanel implements MouseListener, MouseMotionListener{ JButton bt = new JButton(); int x = 0; int y = 0; boolean moving = false; public JPanSelectionTest(){ this.addMouseListener(this); this.addMouseMotionListener(this); } @Override public void paint(Graphics g) { // TODO Auto-generated method stub super.paint(g); if(moving){ Graphics2D g2D = (Graphics2D)g; g2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f)); g2D.setColor(Color.RED); g2D.fillRect(20, 20, x-20, y-20); System.out.println("kk"); } } @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub this.moving = false; this.repaint(); } @Override public void mouseDragged(MouseEvent e) { // TODO Auto-generated method stub this.moving = true; this.x = e.getX(); this.y = e.getY(); this.repaint(); } @Override public void mouseMoved(MouseEvent e) { // TODO Auto-generated method stub } public static void main(String[] args) { JFrame fr = new JFrame(); fr.setSize(800,600); fr.add(new JPanSelectionTest()); fr.setVisible(true); } }
Beispiel das flackert:
weiß jemand woran das liegt und wie ich das verhindern kann?Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Graphics2D; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.JFrame; import javax.swing.JPanel; public class JPanSelectionLagTest extends JPanel implements MouseListener, MouseMotionListener{ public JPanSelectionLagTest(){ this.addMouseListener(this); this.addMouseMotionListener(this); } @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub this.repaint(); } @Override public void mouseDragged(MouseEvent e) { this.repaint(); Graphics2D g2D = (Graphics2D)this.getGraphics(); g2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f)); g2D.setColor(Color.RED); g2D.fillRect(20, 20, e.getX()-20, e.getY()-20); } @Override public void mouseMoved(MouseEvent e) { // TODO Auto-generated method stub } public static void main(String[] args) { JFrame fr = new JFrame(); fr.setSize(800,600); fr.add(new JPanSelectionLagTest()); fr.setVisible(true); } }
Danke schonmal
-
Hallo,
ich würde das mit dem painten ausserhalb der dazu vorgesehenen Methoden lieber lassen.
Flackern tut es weil dein repaint den Zeichenbereich löscht und du dann wieder neu
drüberzeichnest, so ein Geflacker lässt sich nur mit doubleBuffering unterbinden.
Gruß JAdixSignatur ? ? ? So ein Humbug ! ! !
-
Mein Problem ist, ich will ein Jpanel z.B an eine Klasse weitergeben und auf dem JPanel soll das gezeichnet werden.
Somit habe ich ja keine Moeglichkeit die Paint Methode darin zu berschreiben oder?
-
Hallo,
warum glaubst du das es nicht geht ?
Wenn du keine eigene JPanel-Klasse ableiten könntest, dann hättest du ein Problem !
Aber warum sollte das nicht gehen ?
Beschreib mal näher was du vor hast und warum die "Klasse" dein JPanel mit
überschriebener paint-Methode nicht annehmen sollte ?
Gruß JAdixSignatur ? ? ? So ein Humbug ! ! !
-
ich will an eine Klasse ein JPanel von mir weitergeben (schon welche die ich mal vor langem gemacht habe) jetzt möchte ich auf diesen jpanels so ein rechteck zeichnen ohne das ich mein altes JPanel ändern muss.
Ist sowas überhaupt möglich?
-
Hallo,
wie schon gesagt, ich würde nicht ausserhalb der entsprechenden Methoden painten.
Ohne überschreiben von Methoden wirst du das Flackern keinesfalls in den Griff bekommen !
Wenn es für dich Sinn macht deine alten Komponenten zu recyclen musst du diese eben
nochmal erweitern !
Gruß JAdixSignatur ? ? ? So ein Humbug ! ! !
Ähnliche Themen
-
In JPanel zeichnen
Von Thug-Angel im Forum JavaAntworten: 8Letzter Beitrag: 15.08.11, 17:01 -
Rechteck Zeichnen
Von patrick1982l im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 08.03.10, 15:44 -
Qt QPainter schrift in Rechteck zeichnen
Von Orbit im Forum C/C++Antworten: 3Letzter Beitrag: 12.10.09, 09:10 -
[VBA] Wert aus Excel > Rechteck in PPT zeichnen
Von cocoon im Forum Visual Basic 6.0Antworten: 0Letzter Beitrag: 06.07.07, 16:59 -
auf JPanel zeichnen
Von Apon im Forum JavaAntworten: 1Letzter Beitrag: 07.03.05, 12:37





Zitieren
Login





