W ramach ćwiczeń JAVA próbuję napisać programik, w którym będzie kilka pól tekstowych. Po kliknięciu na polu tekstowym prawym przyciskiem myszki i wybraniu np. "Wstaw strzałkę w prawo", powinna narysować się strzałka (na razie tylko linia). Mam jednak jakiś problem, chyba z panelem rysunkowym. Proszę o uwagi, wskazujące co robię źle.
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Line2D;
import java.util.ArrayList;
import javax.swing.*;
public class Rysunek implements ActionListener
{
JFrame ramka;
PanelRysunkowy panelRysunkowy;
JTextArea pole1, pole2, pole3, pole4, pole5, pole6;
JPopupMenu popup;
JMenuItem wstawStrzalkeWprawo, wstawStrzalkeWdol;
int x, y, a, b, xPocz, yPocz, xKonc, yKonc;
ArrayList<Line2D> listaLinii;
Line2D linia;
public static void main(String[] args)
{
Rysunek rysunek = new Rysunek();
rysunek.zbudujGUI();
}
public void zbudujGUI()
{
ramka = new JFrame();
ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ramka.setExtendedState(JFrame.MAXIMIZED_BOTH);
ramka.setLayout(null);
listaLinii = new ArrayList<Line2D>();
panelRysunkowy = new PanelRysunkowy();
ramka.add(panelRysunkowy);
JTextArea[] pola = {pole1 = new JTextArea(),
pole2 = new JTextArea(),
pole3 = new JTextArea(),
pole4 = new JTextArea(),
pole5 = new JTextArea(),
pole6 = new JTextArea(),};
pole1.setBounds(100,100,200,50);
pole2.setBounds(400,100,200,50);
pole3.setBounds(700,100,200,50);
pole4.setBounds(100,220,200,50);
pole5.setBounds(400,220,200,50);
pole6.setBounds(700,220,200,50);
pole1.setName("pole1");
pole2.setName("pole2");
pole3.setName("pole3");
pole4.setName("pole4");
pole5.setName("pole5");
pole6.setName("pole6");
popup = new JPopupMenu();
wstawStrzalkeWprawo = new JMenuItem("Wstaw strzałke w prawo");
wstawStrzalkeWdol = new JMenuItem("Wstaw strzałke w dól");
wstawStrzalkeWprawo.addActionListener(this);
wstawStrzalkeWdol.addActionListener(this);
popup.add(wstawStrzalkeWprawo);
popup.add(wstawStrzalkeWdol);
for (JTextArea p : pola)
{
p.setBackground(Color.RED);
p.setComponentPopupMenu(popup);
ramka.add(p);
}
ramka.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
Graphics2D g2d = (Graphics2D) panelRysunkowy.getGraphics();
Component invoker = popup.getInvoker();
x = invoker.getLocation().x;
y = invoker.getLocation().y;
a = invoker.getBounds().width;
b = invoker.getBounds().height;
if (source == wstawStrzalkeWprawo)
{
xPocz = (x + a) - 50;
yPocz = (y + (b/2)) - 50;
xKonc = (x + a + 100) - 50;
yKonc = (y + (b/2)) - 50;
linia = new Line2D.Double(xPocz,yPocz,xKonc,yKonc);
listaLinii.add(linia);
for (Line2D ln : listaLinii)
{
g2d.draw(ln);
}
panelRysunkowy.repaint();
}
else if (source == wstawStrzalkeWdol)
{
// kod będzie później
}
}
}
class PanelRysunkowy extends JPanel
{
public PanelRysunkowy()
{
setBounds(50,50,1300,450);
setBorder(BorderFactory.createLineBorder(Color.black));
setBackground(Color.ORANGE);
}
public void paintComponent(Graphics g)
{
super.paintComponents(g);
}
}