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, :-)


Rispondi quotando