Swing - bitmapovy editor – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Swing - bitmapovy editor – Java – Fórum – Programujte.comSwing - bitmapovy editor – Java – Fórum – Programujte.com

 

Janulka
~ Anonymní uživatel
3 příspěvky
25. 11. 2014   #1
-
0
-

 ~~Zdravím, dělám bitmapový editor v Javě pomocí Swingu. Mám 2 tlačítka jedno mi vykresluje jinde kruh a druhé taky jinde kruh. Ovšem to původní mi vždycky zmizí. Používám repaint() ale asi špatně. Prosím o radu. Jako druhé tlačítko mám provizorně použito tlačítko čtverec

package bitmapovy_editor;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import javax.swing.*;

/**
 *
 * @author legerska
 */
public class Kruh extends JComponent{
   
    Bitmapovy_editor be = new Bitmapovy_editor();
    boolean kreslit;
    int i;
    int j;
    int k;
    int l;
    
    public Kruh() {
        kreslit = false;
    }
    
    public void VykresliKruh(int i,int j,int k,int l) {
        this.i=i;
        this.j=j;
        this.k=k;
        this.l=l;
         
        kreslit = true;
        //repaint();
    } 
    
    

    public void paintComponent(Graphics g) {
        if (kreslit) {
            g.setColor(Color.RED);
            g.drawOval(i,j,k,l);
            repaint();
        }
    }
}
package bitmapovy_editor;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

/**
 *
 * @author legerska
 */
public class Frame extends JFrame{
    private Kruh kruh;
   
    
    private JPanel panel_tlacitka;
    private JPanel panel_kresleni;
    
    private JButton button_kolecko;
    private JButton button_ctverecek;
    private JButton button_usecka;
    private JButton button_bezierova;
    
    
    public Frame()
    {
        super("Malovani do predmetu GALPR");
     
        
        panel_tlacitka = new JPanel();
        panel_tlacitka.setBackground(Color.GRAY);
       
        this.getContentPane().add(panel_tlacitka, BorderLayout.NORTH);//určí pozici kde bude panel s tlačítky
        
        button_kolecko = new JButton("Kolečko");
        button_ctverecek = new JButton("Čtvereček");
        button_usecka = new JButton("Usečka");
        button_bezierova = new JButton("Bezierova krivka");
        
        panel_tlacitka.add(button_kolecko);
        button_kolecko.addActionListener(new Kresba()); // akce tlacitka
       
        panel_tlacitka.add(button_ctverecek);
        button_ctverecek.addActionListener(new Kresba2()); // akce tlacitka
        
        panel_tlacitka.add(button_usecka);
        panel_tlacitka.add(button_bezierova);
        
        panel_kresleni = new JPanel();
        panel_kresleni.setBackground(Color.YELLOW);
        panel_kresleni.setLayout(new BorderLayout());
 
        this.getContentPane().add(panel_kresleni, BorderLayout.CENTER);
        
        kruh = new Kruh();
        panel_kresleni.add(kruh);
        
        
        
    }
    
    class Kresba implements ActionListener {
        public void actionPerformed(ActionEvent e) {
          kruh.VykresliKruh(100,100,100,100);
          Prekresli();
          
        }
    }

    public void Prekresli()
    {
       repaint();
    }
    
    class Kresba2 implements ActionListener {
        public void actionPerformed(ActionEvent e) {
          kruh.VykresliKruh(200,200,100,100);
          Prekresli();
        }
    }
    
}
Nahlásit jako SPAM
IP: 85.135.88.–
NotBeginner
~ Anonymní uživatel
185 příspěvků
26. 11. 2014   #2
-
0
-

Jen tak zběžně jsem to prohlédl a problém není v repaint(). V celém kodu máš objekt kruh pouze jedenkrát. Takže pokud jich tam chceš mít více je nutno ty objetky kruh vytvořit.

manuálně např. private Kruh kruh1,kruh2;

nebo chytřeji přes pole Kruh [] poleKruhu = new Kruh []; či kolekce.

Nicméně celé řešení máš trošku jiné. Doporučuji Herouta GUI - kapitola kresleni přes Canvas. Má to tam hezky v Češtině vysvětlené. Dokonce jsem tu knihu už viděl i na uloz.to nebo nějakém foru.

Nahlásit jako SPAM
IP: 217.112.161.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 40 hostů

Podobná vlákna

Swing — založil Arekol

[Swing] Feel and Look — založil notbeginner

Java Swing — založil Falcon1651

Swing a vlakna — založil Zerog

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý