Graphics i JPanel

0

Witam
moze zaczne od kodu:
public class SwingTestingClass extends JFrame implements ActionListener
{
private JLabel l = null;
private JPanel panel1 = null;
private static BufferedImage image = null;
private static Graphics graphics = null;

public SwingTestingClass()
{
	image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
	graphics = image.getGraphics();
	graphics.setColor(new Color(0));
	graphics.drawRect(0, 0, 50, 50);
	graphics.drawImage(image, 0, 0, null);
	JFrame f = new JFrame ("hello");
	f.setDefaultCloseOperation(EXIT_ON_CLOSE);
	Border b = new LineBorder(new Color(0),10);
	Border bor1 = new LineBorder(new Color(150),5);
	
	JButton b1 = new JButton ("b1");
	JButton b2 = new JButton ("b2");
	b1.setMnemonic('1');
	b2.setMnemonic('2');
	b1.addActionListener(this);
	b2.addActionListener(this);
	
	
	JPanel panel = new JPanel(new FlowLayout());
	panel.add(b1);
	panel.add(b2);
	panel.setBorder(b);
	f.getContentPane().add(panel);
	
	
	panel1 = new JPanel(new BorderLayout());
	panel1.setBackground(new Color(100,50,90));
	panel1.setBorder(bor1);
	panel1.setPreferredSize(new Dimension(100,100));
	panel1.paint(graphics);

	
	f.getContentPane().add(panel1);
	
	
	f.setLayout(new FlowLayout());
	f.pack();
	f.setVisible(true);
}

public static void main(String[] args) throws InvalidMidiDataException 
{
	new SwingTestingClass();
}

public void actionPerformed(ActionEvent arg0) 
{
	String cmd = arg0.getActionCommand();
	if(cmd.equals("b1"))  panel1.paintAll(graphics);
	if(cmd.equals("b2"))System.out.println("b2 has been pressed!");
}

public void paint(Graphics g)
{
	g.drawRect(0, 0, 100, 100);
}

}

i mam pytanie jak zrobic zeby np narysowac kwadrat na panelu1? chodzi mi o wykorzystanie Graphicsa.
pozdrawiam!!!

0

Stworz wlasna klase dziedziczaca po JPanel i zastap metode paint(Graphics g).

pozdrawiam
johny

0

Dobry pomysl ale nie do konca mi o to chodzilo. Troche mylnie tego painta na koncu umiescilem traktujcie jakby go nie bylo. Czyli zakladamy ze go tam nie ma i chodzi mi teraz o to jak najprosciej narysowac cos przy uzyciu metod Graphicsa czyli np zrobic drawArc ale zeby ten arc ktorego chce narysowac pojawil sie na panelu1? Czekam na sugestie
Pozdrawiam!!!

0

Jeśli rysowanie ma odbywać się z poziomu kodu i bez wpływu użytkownika (rysowanie myszą) to rozwiązanie podał już Johny.

0

Hej

Zrob tak:

  1. Stworz wlasna klase dziedziczaca JPanel w ktorej bedziesz tworzyl panel na ktorym chcesz narysowac kwadrat

  2. W tej klasie przedefiniuj metode paintComponent(Graphics g) i w tej metodzie, najpierw wywolaj super.paintComponent(g)(bo musisz wywolac ta metode z nadklasy = klasy bazowej), a potem narysuj sobie kwadrat , np.
    g.fillRect(0,0,10,10),

3.Pozniej w swoim programie stworz obiekt tej klasy, bedzie to panel z narysowanym juz kwadratem.

0

podam Ci jeszcze maly przyklad:

import java.awt.;
import javax.swing.
;

class Panelik extends JPanel
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.red);
g.fillRect(10,10,50,50);
g.setColor(Color.green);
g.fillRect(20,20,50,50);
}
}

class TestPanelik extends JFrame
{
Container cp = getContentPane();

public TestPanelik()
{
	Panelik p = new Panelik();
	p.setPreferredSize(new Dimension(200,200));
	cp.add(p);
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	pack();
	show();
}

public static void main(String[] args)
{
	new TestPanelik();
}

}

0
elcrack napisał(a)

Zrob tak:

  1. Stworz wlasna klase dziedziczaca JPanel
    ...
    bedzie to panel z narysowanym juz kwadratem.

Przeciez o tym napisalem...

pozdrawiam
johny

0

no nie do konca bo paint to nie to samo co paintComponent, a poza tym altanis_1 po Twoim poscie dalej nie wiedział jak to napisać, wiec podalem przyklad, czasami na przykladzie lepiej widac. Pozdrawiam

0
elcrack napisał(a)

no nie do konca bo paint to nie to samo co paintComponent, a poza tym altanis_1 po Twoim poscie dalej nie wiedział jak to napisać, wiec podalem przyklad, czasami na przykladzie lepiej widac. Pozdrawiam

To, ze nie skumal to fakt, ale paint i paintComponent w tym wypadku dalyby te same efekty :)

pozdrawiam
johny

0

Dzieki za odpowiedzi problem rozwiazany!!!
pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1