im transparenten panel zeichnen

Status
Nicht offen für weitere Antworten.

artjom

Mitglied
tach alle, hoffe ihr check meine frage. folgendes szenario:

ich zeichne in 2 JPanels (DrawingPanel und transparentPanel):
Code:
class DrawingPanel extends JPanel 
implements MouseListener,MouseMotionListener
{
    
    .........
    public JPanel transparentPanel;//setOpaque(false);
    public void mousePressed(MouseEvent e)
    {
        lastPoint = e.getPoint();
    }
    public void mouseDragged(MouseEvent e)
    {
        m_transparentPanel.getGraphics().clearRect(0,0,getWidth(),getHeight());
        m_transparentPanel.getGraphics().drawLine(lastPoint.x,lastPoint.y,e.getPoint().x,e.getPoint().y);
    }
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        .....................
        Rectangle r = g.getClipBounds();
        g.drawImage(image, r.x, r.y, r.width+r.x, r.height+r.y,
        	r.x, r.y, r.width+r.x, r.height+r.y, null);
    }
}
so. transparentPanel liegt über dem DrawingPanel. jetzt möchte ich in dieses überliegeden Panel linien zeichnen. das funktioniert soweit.
das problem ist, dass ich mit dem befehl clearRect auch das gezeichnete innerhalb des DrawingPanels lösche.
warum? wie umgehe ich des?

danke, gruß
 
Warum machste nicht die Zeichnerei im DrawingPanel wo dann das Bild einfach übermalt wird?
TransparentPanel brauchste dann gar nicht mehr.
 
Sag deinem transparenten Panel, dass es transparent ist.
"JPanel#setOpaque( false )"

Ansonsten denkt Swing, dass es ja sowieso egal ist, was mit dem Panel darunter passiert - da es ja nicht sichtbar ist.
 
so ich hab den fehler gefunden. scheinbar wird mit clearRect die im parameter angegebene fläche nicht gelöscht, sondern mit weiß übermalt. das panel ist nach clearRect nicht mehr durchsichtig.
meine frage nun:
wie lösche ich etwas aus diesem panel, so dass der hintergrund durchsichtig bleibt?
hier mein testprog:
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class MyTopPanel extends JPanel 
implements MouseMotionListener
{
	public MyTopPanel() 
	{
		addMouseMotionListener(this);
		setOpaque(false);
	}
	public void mouseDragged(MouseEvent e) 
	{
		getGraphics().clearRect(0,0,getWidth(),getHeight());
		getGraphics().drawLine(0,0,e.getPoint().x,e.getPoint().y);
	}
	public void mouseMoved(MouseEvent e) {	}
}
public class test extends JApplet 
{
	public void init() {
		setSize(new Dimension(800,600));
		//top panel
		MyTopPanel pnlTop=new MyTopPanel();
		pnlTop.setSize(getSize());
		pnlTop.setPreferredSize(getSize());
		//bottom panel
		JPanel pnlBottom=new JPanel();
		pnlBottom.setSize(getSize());
		pnlBottom.setPreferredSize(getSize());
		pnlBottom.setBackground(Color.RED);
		// add
		add(pnlBottom,BorderLayout.WEST);
		add(pnlTop,BorderLayout.WEST);	
	}
}

dass die fläche mit weiß übermalt wird, sieht man daran, dass das untere panel (rote bg farbe) nach clearRect nicht mehr zu sehen ist.

danke, gruß
 
Hm, es koennte auch theoretisch sein, dass nur das hintere Panel nicht drueber gezeichnet wird, nach dem loeschen koenntest du mal ein repaint des hinteren und evtl. danach nochmal forderen Panels versuchen.
 
geht nichts, habs so probiert:
Code:
public void mouseDragged(MouseEvent e) 
{
	getGraphics().clearRect(0,0,getWidth(),getHeight());
	m_pnlBottom.repaint();//m_pnlBottom ist pnlBottom aus der klasse test
	getGraphics().drawLine(0,0,e.getPoint().x,e.getPoint().y);
	//repaint();
}
flimmert und die gezeichnete linie verschwindet nach dem anhalten der maus
irgendwas check ich an den panels nicht...
gruß
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben