~~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();
}
}
}