To raczej zabawowy program. Przy przytrzymaniu myszki maluje dany kształt, taki prosty pędzel mozna rzec. Ale trafiłem na taką małą przeszkodę, mianowicie po wstawienu panelu do ramki metodą setBounds w panelu powstaje "dziura" z lewej i gornej strony panelu , po ktorej nie mozna "rysowac" a panel na oko jest większy niz zadeklarowany(400,400). Tak na oko to grubosc tej dziury jest taka, jaka jest odlegosc panelu od gornego i lewegu brzegu ramki.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run(){
createAndShowGUI();
}
});
}
public static void createAndShowGUI(){
JFrame f = new JFrame("Oval");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(500,500);
f.setBackground(Color.gray);
f.setLocationRelativeTo(null);
f.setVisible(true);
MyPanel panel = new MyPanel();
f.setLayout(null);
f.add(panel);
f.setResizable(true);
}
}
class MyPanel extends JPanel{
ArrayList<Rectangle> ovals = new ArrayList<Rectangle>();
Rectangle current = null;
public MyPanel(){
setBackground(Color.WHITE);
this.setBounds(50,50, 400,400);
setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
addMouseListener(new MouseAdapter(){
@Override
public void mousePressed(MouseEvent e){
addRect(e.getX(),e.getY());
}
});
addMouseMotionListener(new MouseAdapter(){
@Override
public void mouseDragged(MouseEvent e){
addRect(e.getX(),e.getY());
}
});
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
for (Rectangle r : ovals)
r.paintOval(g);
}
public void addRect(int x, int y){
int offset = 1;
current = new Rectangle();
current.setX(x);
current.setY(y);
ovals.add(current);
repaint(getX(),getY(),getWidth()+offset, getHeight()+offset);
}
}
class Rectangle{
private int px;
private int py;
private int width=20;
private int height=20;
public int getX(){
return px;
}
public int getY(){
return py;
}
public void setX( int px){
this.px=px;
}
public void setY( int py){
this.py=py;
}
public int Width(){
return width;
}
public int Height(){
return height;
}
public void paintOval(Graphics g){
g.setColor(Color.MAGENTA);
g.fillOval(px,py,width,height);
g.setColor(Color.MAGENTA);
g.drawOval(px, py, width, height);
}
}
Wdzięczny byłbym za podpowiedź, czemu tak się dzieje :p.