Salve a tutti, sono un neo- programmatore in Java appena trasferito da c++ per la semplicità della programmazione GUI.
Tuttavia non capisco come trattare il repaint di modelli contenenti più oggetti grafici
nell' istante in cui i parametri di tali oggetti vengano cambiati.
Questo è il semplice programma (purtroppo buggato) che finora ho creato:
(qualcuno mi spieghi anche a parole come si risolvono problemi del genere)
------------------------------------------------------------------------------------
1^FILE, MAIN
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;
public class THEGraphics
{
public static void main(String[] args)
{
class ModelComponent extends JComponent
{
public Pnt pnt1;
public Pnt pnt2;
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
pnt2.paintComponent(g2);
pnt1.paintComponent(g2);
}
public void CreateComponent()
{
pnt1 = new Pnt(50,50);
pnt2 = new Pnt(100,100);
}
public void ModifyComponent(int x, int y)
{
pnt2.moveTo(x,y);
}
public void ModifyComponent2()
{
pnt1.moveTo(200,200);
pnt2.moveTo(10,10);
}
}
final ModelComponent modello = new ModelComponent();
modello.CreateComponent();
class MousePressedListener implements MouseListener
{
public void mousePressed(MouseEvent event)
{
modello.ModifyComponent2();
System.out.println("Premuto");
}
//metodi che non fanno nulla
public void mouseReleased(MouseEvent event){}
public void mouseClicked(MouseEvent event){}
public void mouseEntered(MouseEvent event){}
public void mouseExited(MouseEvent event){}
}
MouseListener listener = new MousePressedListener();
modello.addMouseListener(listener);
JFrame frame = new JFrame();
frame.setSize(800,600);
frame.setTitle("OpenFem Model");
frame.add(modello);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setVisible(true);
}
}
-------------------------------------------------------------------------
2^ FILE
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JComponent;
public class Pnt extends JComponent
{
private Rectangle point;
private int DIM_POINT = 2;
private int X_POS;
private int Y_POS;
public Pnt()
{
point = new Rectangle(X_POS,Y_POS,
DIM_POINT,DIM_POINT);
}
public Pnt(int x,int y)
{
DIM_POINT = 2;//default
X_POS = x - DIM_POINT;
Y_POS = y - DIM_POINT;
point = new Rectangle(X_POS,Y_POS,
DIM_POINT,DIM_POINT);
}
public Pnt(int x,int y,int dim)
{
DIM_POINT = 2*( dim - 1 );
X_POS = x - dim;
Y_POS = y - dim;
point = new Rectangle(X_POS,Y_POS,
DIM_POINT,DIM_POINT);
}
public void ChangeDim(int dim)
{
DIM_POINT = dim;
}
public void paintComponent(Graphics g)
{
point = new Rectangle(X_POS,Y_POS,
DIM_POINT,DIM_POINT);
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.draw(point);
}
public int get_X_POS()
{
return X_POS;
}
public int get_Y_POS()
{
return Y_POS;
}
public int get_DIM_POINT()
{
return DIM_POINT;
}
public void set_X_POS(int x)
{
X_POS = x;
repaint();
}
public void set_Y_POS(int y)
{
Y_POS = y;
repaint();
}
public void set_DIM_POINT(int dim)
{
DIM_POINT = dim;
repaint();
}
public void moveBy(int dx, int dy)
{
point.translate(dx,dy);
repaint();
}
public void moveTo(int x, int y)
{
point.setLocation(x,y);
repaint();
}
}

Rispondi quotando