» »

[Java] Problem pri barvanju dveh overlappanih JPanelov

[Java] Problem pri barvanju dveh overlappanih JPanelov

Ascendor ::

Pozdrav!

Na hitro, kaj želim: V ozadju imam sliko iz kamere, ki se osvežuje na pol sekunde, v ospredju želim s klikanjem izrisavanje črt na osprednji JPanel.

Torej v programu imam 2 JPanela, en za ozadje in en za ospredje. V ozadju se mi na vsake 0.5 sekunde repainta slika zajeta iz kamere, v ospredju pa naj bi s klikanjem po paneli lahko označil linije od prvega klika do drugega (Z repaintom osprednjega JPanela), od drugega do tretjega in tako naprej.

Problem: Torej problem mi nastane, ker mi JPanel v ozadju izbriše ob repaintu osprednji JPanel, torej vse poklikane in narisane linije mi z repaintom izbriše. (Lahko da je problem v kodi osprednjega panela?)

Koda osprednjega panela
@Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        
        g2.setColor(Color.RED);
        g2.setStroke(new BasicStroke(3));
        g2.drawLine(firstX, firstY, secondX, secondY);
    }

//To metodo kličem ob poklikanih dveh točkah
public void iLovePainting(int firX, int firY, int secX, int secY) {
        firstX = firX;
        firstY = firY;
        secondX = secX;
        secondY = secY;
        repaint();
    }



openFile se kliče vsake pol sekunde.
Koda iz JPanela ozadja:
    public BufferedImage displayedImage = null;
    
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
       
        if (displayedImage != null) {         
            setPreferredSize(new Dimension(displayedImage.getWidth(), displayedImage.getHeight()));
            revalidate();
            g.drawImage(displayedImage, 0, 0,null);  
        }
    }

    public void openFile(File f) {
        System.out.println("Opening file: "+ f.getName());
        try {
            BufferedImage photo = ImageIO.read(f);
            displayedImage = new BufferedImage(photo.getWidth(), photo.getHeight(), BufferedImage.TYPE_INT_RGB);
            
            for (int i = 0; i < photo.getWidth(); i++) {
                for (int j = 0; j < photo.getHeight(); j++) {
                    displayedImage.setRGB(i, j, photo.getRGB(i, j));
                }
            }
        } catch (IOException e) { 
        }
        repaint();
    }


Torej zanima me, če je komu jasno kaj bi moral spremeniti, da mi ne bi izbrisalo prej narisanih črt.

Upam da nisem čudno napisal. Hvala!
  • spremenilo: Ascendor ()

Spura ::

Verjetno ti izbrise vse crte razen zadnje poklikane, ne pa vseh, ane?

Ascendor ::

Ob repaintanju panela v ozadju mi pobriše tudi zadnje poklikane, drugače pa ja, ob risanju novih na sprednji plošči se prejšnja izbriše

Spura ::

Glede na kodo pac ob repaintu narises eno crto (zadnjo potegnjeno). Moral bi crte risat na image in pol image paintat. To sicer ne resi celega problema (resizei so problem, ki se ga resuje drugace).


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Java] Zasnova shoot em up igre

Oddelek: Programiranje
111179 (858) PecenkA
»

[Java] Nova nit znotraj JPanel.paintComponent()

Oddelek: Programiranje
141921 (1708) alexa-lol
»

[Netbeans-Java]Embossing,blurring,sharpening

Oddelek: Programiranje
71119 (1021) t3hn0
»

JAVA neujemanje tipov

Oddelek: Programiranje
151978 (1611) l0g1t3ch
»

[NALOGA][Java] Težave pri pisanju slikarja

Oddelek: Programiranje
202256 (1898) l0g1t3ch

Več podobnih tem