Ciao!
Avrei bisogno ancora una volta un piccolo aiuto...
Il problema è questo: dovrei disegnare delle semplici immagini in un'applicazione, immagini che però devono essere continuamente ridisegnate a seconda dell' interazione con l'utente.
Ho provato a disegnare tramite un Graphics su un pannello (ridefinendo la classe JPanel), ma o implemento tutto il controllo del disegno in uno stesso metodo (cosa alquanto difficile poichè dovrei poter anche decidere quali elementi grafici disegnare e quali no in un dato momento) oppure invocando più volte il metodo di disegno di un elemento (ad esempio per disegnare 2 cerchi) vengono creati più pannelli uno sopra l'altro (almeno credo...) ed è possibile visualizzare solo l'ultimo pannello visualizzato, mentre io vorrei poter disegnare + volte sullo steso pannello senza che quello che è stato disegnato precedentemente venga disegnato. Per spiegarmi meglio posto di seguito ciò che finora ho implementato:
codice:
public class MainWindow implements MainWinInterface{
private JPanel jContentPane = null;
private JFrame jFrame = null; // @jve:decl-index=0:visual-constraint="19,14"
private MyPanel jPanel = null;
private Graphics g;
public MainWindow()
{
jFrame = this.getJFrame();
this.jFrame.show();
}
public void drawSem(int posX,int posY,int dim,char state)
{
this.jPanel.setParameter(posX,posY,dim,state);
this.jPanel.setParameter(posX+10,posY+10,dim-3,'r');
};
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJPanel(), java.awt.BorderLayout.CENTER);
}
return jContentPane;
}
/**
* This method initializes jFrame
*
* @return javax.swing.JFrame
*/
private JFrame getJFrame() {
if (jFrame == null) {
jFrame = new JFrame();
jFrame.setContentPane(getJContentPane());
jFrame.setTitle("jFrame");
jFrame.setSize(349, 129);
jFrame.setName("mainFrame");
}
return jFrame;
}
/**
* This method initializes jPanel
*
* @return javax.swing.JPanel
*/
private MyPanel getJPanel() {
if (jPanel == null) {
jPanel = new MyPanel();
}
return jPanel;
}
class MyPanel extends JPanel
{
private int posX;
private int posY;
private int dim;
private char state;
public void setParameter(int posX, int posY, int dim, char state)
{
this.posX = posX;
this.posY = posY;
this.dim = dim;
this.state = state;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
if (state=='r')
g.setColor(Color.RED);
else
g.setColor(Color.GREEN);
System.out.println("draw");
g.fillOval(posX,posY,dim,dim);
System.out.println("drawrepaint");
}
}
}
In alternativa come potrei risolvere il problema in un'altra maniera?
In C# avevo risolto un problema analogo disegnando su una Bitmap all'interno di una pictureBox, come posso fare una cosa analoga in Java ? (qual'è l'equivalente della PictureBox? Come ottengo la Bitmap?)
Ciao e grazie tutti,
:-)