Ecco il codice:
Qui le classi esterne importate Figura e i suoi figli Cerchio e Quadratocodice:package visualizzatore; import geometrie.*; import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.awt.geom.Point2D; import javax.swing.border.TitledBorder; public class ClsParam extends JApplet { private DrawPanel dPanel; private ShapePanel cerchiPanel,quadratiPanel; private JButton traccia = new JButton("Traccia"); public void init() { try{ // this is a workaround for a security conflict with some browsers // including some versions of Netscape & Internet Explorer which do // not allow access to the AWT system event queue which JApplets do // on startup to check access. May not be necessary with your browser. JRootPane rootPane = this.getRootPane(); rootPane.putClientProperty("defeatSystemEventQueueCheck", Boolean.TRUE); JPanel panelS = new JPanel(); dPanel = new DrawPanel(100,100); cerchiPanel = new ShapePanel(9,"numCerchi","c(x,y)","raggio"); quadratiPanel = new ShapePanel(9,"numQuadrati","p(x,y)","lato"); panelS.add(cerchiPanel); panelS.add(quadratiPanel); panelS.setLayout(new GridLayout(2,1)); dPanel.setLayout(new FlowLayout()); add(dPanel); add(BorderLayout.EAST, panelS); add(BorderLayout.SOUTH, traccia); traccia.addActionListener(new TracciaListener(cerchiPanel,quadratiPanel,dPanel,this)); // provide any initialisation necessary for your JApple } catch(Exception e){ add(new JLabel("Eccezione: "+e.toString())); } } class ShapePanel extends JPanel{ JLabel lShape; Sequenza<JLabel> pointLabels,scalarLabels; JTextField tShape; Sequenza<JTextField> xBox,yBox,scalarBox; public ShapePanel(int rows,String label,String pointLabel,String scalarLabel){ setLayout(new GridLayout(rows+1,5)); setBorder(new TitledBorder("pannello "+label)); lShape = new JLabel(label); tShape = new JTextField(); pointLabels = new Sequenza<JLabel>(); scalarLabels = new Sequenza<JLabel>(); xBox = new Sequenza<JTextField>(); yBox = new Sequenza<JTextField>(); scalarBox = new Sequenza<JTextField>(); add(lShape); add(tShape); add(new JLabel()); add(new JLabel()); add(new JLabel()); for(int i=0;i<rows;i++){ pointLabels.addItem(new JLabel((i+1)+": "+pointLabel)); scalarLabels.addItem(new JLabel((i+1)+": "+scalarLabel)); xBox.addItem(new JTextField(6)); yBox.addItem(new JTextField(6)); scalarBox.addItem(new JTextField(6)); } pointLabels.setToFirst(); scalarLabels.setToFirst(); xBox.setToFirst(); yBox.setToFirst(); scalarBox.setToFirst(); while((pointLabels.existsNext())&&(scalarLabels.existsNext())&&(xBox.existsNext())&& (yBox.existsNext())&&(scalarBox.existsNext())){ add(pointLabels.getItem()); add(xBox.getItem()); add(yBox.getItem()); add(scalarLabels.getItem()); add(scalarBox.getItem()); pointLabels.setToNext(); scalarLabels.setToNext(); xBox.setToNext(); yBox.setToNext(); scalarBox.setToNext(); } } public Sequenza<Cerchio> getDataCrc(){ int numCerchi = Integer.parseInt(tShape.getText()); Sequenza<Cerchio> crc = new Sequenza<Cerchio>(); double x,y; int raggio; xBox.setToFirst(); yBox.setToFirst(); scalarBox.setToFirst(); for(int i=0;i<numCerchi;i++){ if(xBox.existsNext() && yBox.existsNext() && scalarBox.existsNext()){ x = Double.parseDouble(xBox.getItem().getText()); y = Double.parseDouble(yBox.getItem().getText()); raggio = Integer.parseInt(scalarBox.getItem().getText()); crc.addItem(new Cerchio(new Point2D.Double(x,y),raggio)); xBox.setToNext(); yBox.setToNext(); scalarBox.setToNext(); } } return crc; } public Sequenza<Quadrato> getDataQdr(){ int numQuadrati = Integer.parseInt(tShape.getText()); Sequenza<Quadrato> qdr = new Sequenza<Quadrato>(); double x,y; int lato; xBox.setToFirst(); yBox.setToFirst(); scalarBox.setToFirst(); for(int i=0;i<numQuadrati;i++){ if(xBox.existsNext() && yBox.existsNext() && scalarBox.existsNext()){ x = Double.parseDouble(xBox.getItem().getText()); y = Double.parseDouble(yBox.getItem().getText()); lato = Integer.parseInt(scalarBox.getItem().getText()); qdr.addItem(new Quadrato(new Point2D.Double(x,y),lato)); xBox.setToNext(); yBox.setToNext(); scalarBox.setToNext(); } } return qdr; } } class DrawPanel extends JPanel{ private Sequenza<Cerchio> seqCrc; private Sequenza<Quadrato> seqQdr; public DrawPanel(){ setBorder(new TitledBorder("Lavagna da disegno")); setCerchio(new Sequenza<Cerchio>()); setQuadrato(new Sequenza<Quadrato>()); } public DrawPanel(int height,int width){ this(); } public void setCerchio (Sequenza<Cerchio> seqCrc) { this.seqCrc = seqCrc; } public void setQuadrato (Sequenza<Quadrato> seqQdr) { this.seqQdr = seqQdr; } public void paintComponent (Graphics g) { //JOptionPane.showMessageDialog(this, "creazione Graphics"); Graphics2D g2 = (Graphics2D) g; //JOptionPane.showMessageDialog(this, "Graphics creata"); if (seqCrc != null) if (! seqCrc.isEmpty()) { //JOptionPane.showMessageDialog(this, "cerchi ok"); seqCrc.setToFirst(); Cerchio crc = seqCrc.getItem(); crc.draw (g2); while (seqCrc.existsNext()) { seqCrc.setToNext(); crc = seqCrc.getItem(); crc.draw (g2); } } if (seqQdr != null) if (! seqQdr.isEmpty()) { //JOptionPane.showMessageDialog(this, "qdrati ok"); seqQdr.setToFirst(); Quadrato qdr = seqQdr.getItem(); qdr.draw (g2); while (seqQdr.existsNext()) { seqQdr.setToNext(); qdr = seqQdr.getItem(); qdr.draw (g2); } } } } class TracciaListener implements ActionListener{ ShapePanel crcPanel,qdrPanel; DrawPanel dPanel; ClsParam clsParam; public TracciaListener(ShapePanel crcPanel,ShapePanel qdrPanel,DrawPanel dPanel,ClsParam clsParam){ this.crcPanel = crcPanel; this.qdrPanel = qdrPanel; this.dPanel = dPanel; this.clsParam = clsParam; } public void actionPerformed(ActionEvent e){ dPanel.setCerchio(crcPanel.getDataCrc()); dPanel.setQuadrato(qdrPanel.getDataQdr()); dPanel.paintComponent(crcPanel.getGraphics()); dPanel.repaint(); } } }
il problema sta che quando disegno una qualsiasi figura nella lavagna mi disegna anche il Button e il repaint() non funziona, se "sovvrascrivo" una figura per rimpicciolirla rimane com'è, o meglio me la disegna ma sotto quella precedente, ovvero il repaint non me la cancella ma me la lascia lì.codice:package geometrie; import java.awt.*; import java.awt.geom.Point2D; public abstract class Figura { protected abstract void draw(Graphics g); protected abstract void trasla (int dx,int dy); protected abstract boolean contains (Point2D p); } ----------------------------------------------------- package geometrie; import java.awt.*; import java.awt.geom.*; import java.lang.Double; public class Quadrato extends Figura { private Point2D vertSupSx; private int lato; public Quadrato (Point2D vertSupSx, int lato) { this.vertSupSx = vertSupSx; this.lato = lato; } public void draw (Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.fill (new Rectangle2D.Double (vertSupSx.getX(), vertSupSx.getY(), lato, lato)); } public void trasla (int dx, int dy) { vertSupSx = new Point2D.Double (vertSupSx.getX() + dx, vertSupSx.getY() + dy); } public boolean contains (Point2D p) { Rectangle2D r = new Rectangle2D.Double (vertSupSx.getX(), vertSupSx.getY(), lato, lato); return r.contains (p); } } ---------------------------------------------------------------------- package geometrie; import java.awt.*; import java.awt.geom.*; import java.lang.Double; public class Cerchio extends Figura { private Point2D centro; private int raggio; public Cerchio (Point2D centro, int raggio) { this.centro = centro; this.raggio = raggio; } public void draw (Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.fill (new Ellipse2D.Double (centro.getX() - raggio, centro.getY() - raggio, 2*raggio, 2*raggio)); } public void trasla (int dx, int dy) { centro = new Point2D.Double (centro.getX() + dx, centro.getY() + dy); } public boolean contains (Point2D p) { Ellipse2D e = new Ellipse2D.Double (centro.getX() - raggio, centro.getY() - raggio, 2*raggio, 2*raggio); return e.contains (p); } }
Qualcuno puo' aiutarmi, per favore?
Ringrazio in anticipo chiunque abbia una soluzione a questo problema.
Kimal.

Rispondi quotando