Forum » Programiranje » [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
openFile se kliče vsake pol sekunde.
Koda iz JPanela ozadja:
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!
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 ()
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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Java] Zasnova shoot em up igreOddelek: Programiranje | 1191 (870) | PecenkA |
» | [Java] Nova nit znotraj JPanel.paintComponent()Oddelek: Programiranje | 1942 (1729) | alexa-lol |
» | [Netbeans-Java]Embossing,blurring,sharpeningOddelek: Programiranje | 1130 (1032) | t3hn0 |
» | JAVA neujemanje tipovOddelek: Programiranje | 1983 (1616) | l0g1t3ch |
» | [NALOGA][Java] Težave pri pisanju slikarjaOddelek: Programiranje | 2289 (1931) | l0g1t3ch |