Witam. Chcialam stworzyc aplikacje graficzna podobna do painta. Tylko, ze utknelam. Kiedy naciskam button zeby mi rysowal kreske i wywoolywal klase to on niereaguje. Rysowanie działa poprawnie ale nie reaguje przy buttonie. Co jest zle? Ponizej kod programu:
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
import java.awt.geom.*;
import javax.swing.*;
import javax.swing.JFrame;
import java.awt.ActiveEvent.*;
public class Malarz extends JFrame implements ActionListener
{
private JPanel p = new JPanel();
Malarz() throws Exception
{
Toolkit zestaw = Toolkit.getDefaultToolkit();
Dimension rozmiarEkranu = zestaw.getScreenSize();
int szerEkranu = rozmiarEkranu.width;
int wysEkranu = rozmiarEkranu.height;
setTitle("Malarz");
setSize(szerEkranu/2,wysEkranu/2);
setLocation(szerEkranu/4,wysEkranu/4);
setResizable(true);
//BufferedImage ikona = ImageIO.read(new File("ikona.gif"));
//setIconImage(ikona);
add(doToolBar(),BorderLayout.NORTH);
add(p,BorderLayout.CENTER);
setJMenuBar(doMenu());
}
public JMenuBar doMenu()
{
JMenuBar mb = new JMenuBar();
JMenu menuPlik = new JMenu("Plik");
JMenu menuEdycja = new JMenu("Edycja");
JMenu menuPomoc = new JMenu("Pomoc");
mb.add(menuPlik);
mb.add(menuEdycja);
mb.add(menuPomoc);
JMenuItem elemNowy = menuPlik.add("Nowy");
JMenuItem elemOtworz = menuPlik.add("Otwórz");
elemOtworz.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK));
JMenuItem elemZapisz = menuPlik.add("Zapisz");
elemZapisz.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK));
JMenuItem elemZapiszJako = menuPlik.add("Zapisz jako");
JMenuItem elemZamknij = menuPlik.add(new AbstractAction("Zamknij")
{
public void actionPerformed(ActionEvent zdarzenie)
{
System.exit(0);
}
});
menuPlik.add(elemNowy);
menuPlik.add(elemOtworz);
menuPlik.addSeparator();
menuPlik.add(elemZapisz);
menuPlik.add(elemZapiszJako);
menuPlik.add(elemZamknij);
JMenuItem dzialWytnij = menuPlik.add("Wytnij");
dzialWytnij.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK));
JMenuItem dzialKopiuj = menuPlik.add("Kopiuj");
dzialKopiuj.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK));
JMenuItem dzialWklej = menuPlik.add("Wklej");
elemZapisz.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK));
menuEdycja.add(dzialWytnij);
menuEdycja.add(dzialKopiuj);
menuEdycja.add(dzialWklej);
return mb;
}
public JToolBar doToolBar()
{
JToolBar jtb = new JToolBar("Kształty");
JToggleButton przyciskLinia = new JToggleButton(new ImageIcon("linia.png"));
przyciskLinia.setToolTipText("linia");
przyciskLinia.setActionCommand("1");
JToggleButton przyciskElipsa = new JToggleButton(new ImageIcon("elipsa.png"));
przyciskLinia.setToolTipText("elipsa");
JToggleButton przyciskProstokat = new JToggleButton(new ImageIcon("prostokat.png"));
przyciskLinia.setToolTipText("prostokat");
JToggleButton przyciskGumka = new JToggleButton(new ImageIcon("gumka.png"));
przyciskGumka.setToolTipText("gumka");
jtb.add(przyciskLinia);
jtb.add(przyciskElipsa);
jtb.add(przyciskProstokat);
jtb.addSeparator();
jtb.add(przyciskGumka);
przyciskLinia.addActionListener(this);
//Action przyciskLinia = new Rysuj();
return jtb;
}
public void actionPerformed(ActionEvent e)
{
switch (Integer.parseInt(e.getActionCommand()))
{
case 1:
{
Rysuj rr = new Rysuj();
Container powZawartosci = getContentPane();
powZawartosci.add(rr);
}
}
}
private class Rysuj extends JPanel
{
private Point2D poczatek;
private Point2D koniec;
private ArrayList linie;
public Rysuj (){
linie = new ArrayList();
addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
onPress(evt);
}
});
addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseDragged(java.awt.event.MouseEvent evt) {
onDrag(evt);
}
});
}
private void onPress(java.awt.event.MouseEvent evt) {
poczatek = new Point2D.Double(evt.getX(), evt.getY());
}
private void onDrag(java.awt.event.MouseEvent evt) {
koniec = new Point2D.Double(evt.getX(), evt.getY());
Line2D linia = new Line2D.Double(poczatek, koniec);
linie.add(linia);
repaint();
poczatek = koniec;
}
public void paintComponent (Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
for (int i = 0; i < linie.size(); i++)
g2.draw ((Line2D)linie.get(i));
}
}
public static void main(String[] args) throws Exception
{
Malarz m = new Malarz();
m.setVisible(true);
m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}