Saudações.
Tenho um exercício em que o livro faz um pequeno Paint usando classes aninhadas e usando atributos da classe externa(main) nas classes internas que operam através de seus métodos eventos de mouse, coordenadas, etc.
Separei as três classes mais críticas e gostaria que me ajudassem a achar uma solução para eu possa fazer o mesmo programa sem aninhamento de classes, usando cada classe em um arq separadamente(pois, mesmo declarando os atributos como public, não funciona).
***classe principal que tem os atributos currentSharpe e image, que seriam acessados pelas classes internas
[code]
public class Paint extends Frame
{
private Button button1 = new Button();
private Button button2 = new Button();
private Button button3 = new Button();
private Image image = null;
private Shape currentShape = null;
public Paint()
{
try
{
jbInit();
}
catch(Exception e)
{
e.printStackTrace();
}
}
private void jbInit() throws Exception
{
this.setLayout(null);
this.setSize(new Dimension(400, 300));
this.setTitle("My Paint");
this.setBackground(SystemColor.control);
setTitle("My Paint");
button1.setLabel("Line");
button1.setBounds(new Rectangle(0, 0, 105, 25));
button2.setLabel("Rectangle");
button2.setBounds(new Rectangle(105, 0, 105, 25));
button3.setLabel("Oval");
button3.setBounds(new Rectangle(210, 0, 105, 25));
this.add(button3, null);
this.add(button2, null);
this.add(button1, null);
Paint p = new Paint();
MouseKeeper k = new MouseKeeper();
addMouseListener(k);
addMouseMotionListener(k);
}
public void paint(Graphics g)
{
if (image == null)
image = createImage(550, 350);
if(image != null)
g.drawImage(image, 0, 0, this);
}
public static void main(String []args)
{
Frame myFrame = new Paint();
myFrame.show();
}
private void button2_actionPerformed(ActionEvent e)
{
}
}[/code]
***Classe que trata os eventos de mouse e acessa o atributo currenteShape e image da classe principal
[code]public class MouseKeeper extends MouseAdapter implements MouseMotionListener
{
private int startX, startY;
private int lastX, lastY;
public void mousePressed(MouseEvent e)
{
lastX = startX = e.getX();
lastY = startY = e.getX();
}
public void drawShape(Graphics g)
{
if(currentShape != null)
currentShape.draw(g, startX, startY, lastX, lastY);
}
public void mouseDragged(MouseEvent e)
{
Graphics g = image.getGraphics();
g.setXORMode(Color.white);
drawShape(g);
lastX = e.getX();
lastY = e.getY();
drawShape(g);
repaint();
}
public void mouseReleased(MouseEvent e)
{
Graphics g = image.getGraphics();
g.setXORMode(Color.white);
drawShape(g);
g.setPaintMode();
lastX = e.getX();
lastY = e.getY();
drawShape(g);
repaint();
}
public void mouseMoved(MouseEvent e)
{
}
}[/code]
***Classe shape que tb acessa o atributo currentShape da classe principal
public abstract class Shape extends Button implements ActionListener
{
public Shape(String name)
{
super(name);
addActionListener(this);
}
public abstract void draw(Graphics g, int a, int b, int c, int d);
public void actionPerformed(ActionEvent e)
{
currentShape = this;
}
}
Agradeço
Eliselbert