Program na tym etapie ma rysować kreski w BufferedImage. Nie rozumiem dlaczego linie nie zostają na rysunku. Poza tym jak powiększam okno to wielkość panelu na którym jest BufferedImage nie zwiększa się. W którym miejscu popełniam błąd?
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
public class Malarz extends JFrame implements ActionListener, MouseListener, MouseMotionListener
{
PanelDoRysowania p =new PanelDoRysowania();
Point startPoint, endPoint, prePoint;
BufferedImage bi;
Graphics2D g2;
public Malarz() throws IOException
{
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("im.JPG"));
setIconImage(ikona);
add(doToolBar(),BorderLayout.NORTH);
add(p,BorderLayout.CENTER);
setJMenuBar(doMenu());
addMouseListener(this);
addMouseMotionListener(this);
setVisible(true);
p.setVisible(true);
bi= new BufferedImage(p.getWidth(),p.getHeight(),BufferedImage.TYPE_INT_RGB);
g2=bi.createGraphics();
g2.setColor(Color.WHITE);
g2.fillRect(0,0,p.getWidth(),p.getHeight());
}
public JMenuBar doMenu()
{
JMenuBar mb = new JMenuBar();
//do zaimplementowania
return mb;
}
public JToolBar doToolBar()
{
JToolBar bar = new JToolBar("Kształty");
JButton b1 = new JButton(new ImageIcon("im2.JPG"));
bar.add(b1);
b1.setToolTipText("linia");
b1.addActionListener(this);
JButton b2 = new JButton(new ImageIcon("im2.JPG"));
bar.add(b2);
b2.setToolTipText("linia");
b2.addActionListener(this);
JButton b3 = new JButton(new ImageIcon("im2.JPG"));
bar.add(b3);
b3.setToolTipText("linia");
b3.addActionListener(this);
JButton b4 = new JButton(new ImageIcon("im2.JPG"));
bar.add(b4);
b4.setToolTipText("linia");
b4.addActionListener(this);
JButton b5 = new JButton(new ImageIcon("im2.JPG"));
bar.add(b5);
b5.setToolTipText("linia");
b5.addActionListener(this);
return bar;
}
private class PanelDoRysowania extends JPanel
{
PanelDoRysowania(){
super();
}
public void paintComponent(Graphics g)
{
g.drawImage(bi, 0, 0, null);
}
}
public void mouseClicked(MouseEvent e){}
public void mousePressed(MouseEvent e){
startPoint = new Point(e.getPoint());
prePoint= new Point(startPoint);
}
public void mouseReleased(MouseEvent e){
endPoint = new Point(e.getPoint());
bi.createGraphics();
repaint();
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseDragged(MouseEvent e){
Graphics2D g2 = (Graphics2D)getGraphics();
g2.setXORMode(Color.BLACK);
g2.setColor(g2.getBackground());
g2.drawLine(startPoint.x, startPoint.y, prePoint.x,prePoint.y);
g2.setXORMode(g2.getBackground());
g2.setColor(Color.BLACK);
g2.drawLine(startPoint.x, startPoint.y, e.getX(), e.getY());
prePoint=e.getPoint();
}
public void mouseMoved(MouseEvent e){}
@Override
public void actionPerformed(ActionEvent e)
{
switch (Integer.parseInt(e.getActionCommand()))
{
//do zaimplementowania
}
}
public static void main(String[] args) throws IOException
{
Malarz m = new Malarz();
m.setVisible(true);
m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}