Witam,
jako początkujący programista nie chciałbym nabyć złych nawyków. Starałem się wymyślić dla siebie jakiś edukacyjny przykład, w którym działo by się coś ciekawego (oczywiście na tym etapie). W związku z tym moje pytanie czy są tutaj jakieś potężne strzały itd?? Coś czego kategorycznie nie należy robić. Z góry dziękuję za odp.

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.*;

import javax.swing.*;
import javax.swing.border.Border;

public class TestSiatki {
	public static void main(String[] args) {
		RamkaGlowna ramka = new RamkaGlowna();
		ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		ramka.setVisible(true);
	}
}

class RamkaGlowna extends JFrame {
	public RamkaGlowna() {
		Toolkit zestaw = Toolkit.getDefaultToolkit();
		Dimension wymiar = zestaw.getScreenSize();
		SZER = wymiar.width;
		WYS = wymiar.height;
		this.setSize(SZER / 2, WYS / 2);
		this.setLocation(SZER / 4, WYS / 4);
		this.setName("Siatki");

		final PanelRysowania rysowanie = new PanelRysowania();
		Container powZawartosci = getContentPane();
		powZawartosci.add(rysowanie, BorderLayout.CENTER);

		JMenuBar pasekMenu = new JMenuBar();
		this.setJMenuBar(pasekMenu);
		JMenu mPlik = new JMenu("Plik");
		JMenuItem mNowy = new JMenuItem("Nowy");
		JMenuItem mOtw = new JMenuItem("Otworz plik");
		JMenuItem mZapisz = new JMenuItem("Zapisz plik");
		JMenuItem mZakoncz = new JMenuItem("Zakoncz");

		pasekMenu.add(mPlik);
		mPlik.add(mNowy);
		mPlik.add(mOtw);
		mPlik.add(mZapisz);
		mPlik.addSeparator();
		mPlik.add(mZakoncz);
		mZakoncz.setToolTipText("Zamyka program, bez zapisywania zmian");

		JPanel panelOpcja = new JPanel();
		JButton przyciskDodaj = new JButton("Opcje wstawiania");

		przyciskDodaj.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {
				OknoOpcja opcja = new OknoOpcja();
				opcja.setVisible(true);
			}

		});

		final JComboBox wyborSiatki = new JComboBox();
		wyborSiatki.addItem("100");
		wyborSiatki.addItem("150");
		wyborSiatki.addItem("200");
		panelOpcja.add(przyciskDodaj);
		panelOpcja.add(wyborSiatki);
		powZawartosci.add(panelOpcja, BorderLayout.SOUTH);

		wyborSiatki.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent zdarzenie) {
				Siatka.ustawWymiar(Integer.parseInt((String) wyborSiatki
						.getSelectedItem()));

			}
		});
		mZakoncz.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {
				zamknijProgram();
			}

		});

	}

	public void zamknijProgram() {
		this.dispose();
	}

	private static int WYS;
	private static int SZER;
}

class PanelRysowania extends JPanel {
	public PanelRysowania() {
		this.setBackground(Color.GRAY);
		listaSiatek = new ArrayList();
		listaLinie = new ArrayList();
		this.addMouseListener(new klikMyszki());

	}

	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D) g;

		for (int i = 0; i < listaSiatek.size(); i++)
			g2.draw((Rectangle2D) listaSiatek.get(i));

		for (int i = 0; i < listaLinie.size(); i++)
			g2.draw((Line2D) listaLinie.get(i));

	}

	private class klikMyszki extends MouseAdapter {
		public void mousePressed(MouseEvent zdarzenie) {
			listaSiatek.add(new Siatka(zdarzenie.getX(), zdarzenie.getY())
					.zwrocSiatka());
			// listaLinie.add(new Siatka(zdarzenie.getX(), zdarzenie.getY())
			// .zwrocLinie());
			repaint();
		}

	}

	private ArrayList listaSiatek;
	private ArrayList listaLinie;
}

class Siatka {
	public Siatka(double ax, double ay) {
		x = ax;
		y = ay;
	}

	public Rectangle2D zwrocSiatka() {
		if (p == "LGR") {
			siatka = new Rectangle2D.Double(x, y, w, w);
			return siatka;
		} else {
			siatka = new Rectangle2D.Double(x - w / 2, y - w / 2, w, w);
			return siatka;
		}
	}

	public Line2D zwrocLinie() {
		double x1 = x + w / 2;
		double y1 = y;
		double x2 = x + w / 2;
		double y2 = y + w;
		linia = new Line2D.Double(x1, y1, x2, y2);
		return linia;
	}

	public static void ustawWymiar(int aWym) {
		w = aWym;
	}

	public static void ustawPkt(String punkt) {
		p = punkt;

	}

	private static String p;
	private static int w;
	private double x, y;
	private Rectangle2D siatka;
	private Line2D linia;
}

class OknoOpcja extends JFrame {
	public OknoOpcja() {
		Toolkit zestaw = Toolkit.getDefaultToolkit();
		Dimension wymiar = zestaw.getScreenSize();
		SZER = wymiar.width;
		WYS = wymiar.height;
		this.setSize(SZER / 3, WYS / 3);
		this.setLocation(SZER / 4, WYS / 4);
		this.setName("Opcje");

		final ButtonGroup grupa = new ButtonGroup();
		final JRadioButton lewRog = new JRadioButton("LGR");
		final JRadioButton cen = new JRadioButton("CENTER");

		grupa.add(cen);
		grupa.add(lewRog);

		Container powZawartosci = getContentPane();
		JPanel panelPrzy = new JPanel();
		panelPrzy.add(lewRog);
		panelPrzy.add(cen);

		panelPrzy.setBorder(BorderFactory
				.createTitledBorder("Punkt wstawiania"));

		powZawartosci.add(panelPrzy, BorderLayout.CENTER);
		JButton przyciskOK = new JButton("OK");
		powZawartosci.add(przyciskOK, BorderLayout.SOUTH);

		przyciskOK.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {
				if (lewRog.isSelected() == true) {
					Siatka.ustawPkt("LGR");
					lewRog.setSelected(true);
				} else {
					Siatka.ustawPkt("C");
					cen.setSelected(true);
				}

			}

		});

	}

	private static int SZER;
	private static int WYS;
}