Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Aiuto! Non riesco ad inserire un pulsante JButton

    Salve. Sono ore ormai che provo ad inserire un pulsante JButton, il problema risiede nel fatto che non mi fa compilare a causa dell'evento che ho associato al pulsante, eppure mi pare di aver scritto tutto bene. Ho provato a mettere l'evento ActionListener anche all'interno di main() ma siccome è di tipo static, non mi fa usare le variabili interne che sono private... cosa posso fare??

    codice:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class Lavagna extends JPanel
    {
    	private int pointCount=0;
    	private Point points[] = new Point[99999];
    	private JButton cancella = new JButton("Cancella tutto");
    	cancella.addActionListener
    	(
    		new ActionListener()
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				for (int i=0;i<pointCount;i++)
    				{
    					points[i] = null;
    				}
    			}
    		}
    	);
    	public Lavagna()
    	{
    		addMouseMotionListener
    		(
    			new MouseMotionAdapter()
    			{
    				public void mouseDragged(MouseEvent event)
    				{
    					if (pointCount < points.length)
    					{
    						points[pointCount] = event.getPoint();
    						pointCount++;
    						repaint();
    					}
    				}
    			}
    		);
    	}
    	public void paintComponent(Graphics g)
    	{
    		super.paintComponent(g);
    		for (int i=0;i<pointCount;i++)
    		{
    			g.fillOval(points[i].x,points[i].y,4,4);
    		}
    	}
    	public static void main(String[] args)
    	{
    		JFrame frame = new JFrame("My Java Window");
    		Lavagna pannello = new Lavagna();
    		Pulsante cancella = new Pulsante();
    		frame.setSize(600,400);
    		frame.setLocationRelativeTo(null);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.add(pannello,BorderLayout.CENTER);
    		frame.add(new JLabel("Disegna con il mouse"),BorderLayout.SOUTH);
    		frame.add(cancella,BorderLayout.NORTH);
    		frame.setVisible(true);
    	}
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ti ho rimaneggiato un po' il codice
    codice:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class Lavagna extends JPanel {
    	private int pointCount=0;
    	private Point points[] = new Point[99999];
    	private JButton cancella = new JButton("Cancella tutto");
    	
    	public Lavagna() {
                cancella.addActionListener( new ActionListener() {
                public void actionPerformed(ActionEvent event) {
                    points = new Point[99999];
                    pointCount = 0;
                    repaint();
                }
            });
                addMouseMotionListener(new MouseMotionAdapter()	{
                    public void mouseDragged(MouseEvent event) {
                        if (pointCount < points.length)	{
                            points[pointCount] = event.getPoint();
                            pointCount++;
                            repaint();
                        }
                    }
                });
            }
    	public void paintComponent(Graphics g) {
                super.paintComponent(g);
                for (int i=0;i<pointCount && points[i] != null;i++) {
                    g.fillOval(points[i].x,points[i].y,4,4);
                }
            }
            
            public static void main(String[] args) {
                JFrame frame = new JFrame("My Java Window");
                Lavagna pannello = new Lavagna();
                //Pulsante cancella = new Pulsante();
                frame.setSize(600,400);
                frame.setLocationRelativeTo(null);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(pannello,BorderLayout.CENTER);
                frame.add(new JLabel("Disegna con il mouse"),BorderLayout.SOUTH);
                frame.add(pannello.cancella,BorderLayout.NORTH);
                frame.setVisible(true);
            }
    }
    bastava spostare nel posto giusto qualcosa, e rivedere un po' la parte dell'action.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Grazie funziona. Però vorrei che il pulsante occupasse tutta la larghezza della finestra, e per fare questo immagino che bisogna aggiungerlo nel Frame, non nel Panel... ma come faccio? o_O

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ed infatti lo sto aggiungendo al frame. Solo che come lo avevi messo tu nemmeno compilava.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Originariamente inviato da Andrea1979
    ed infatti lo sto aggiungendo al frame. Solo che come lo avevi messo tu nemmeno compilava.
    Ho capito... però così com'è, il pulsante è messo come se fosse un FlowLayout. Vorrei che occupasse tutta la larghezza della finestra in alto, come faccio?

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    E' esattamente quello che fa.
    Immagini allegate Immagini allegate
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Ah sì scusa, forse prima non avevo copiato bho... ora appare anche a me così, grazie mille ^^

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    figurati. ciao
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Però pensandoci, non mi è chiara una cosa, precisamente la riga frame.add(pannello.cancella,BorderLayout.NORTH);

    Il pulsante lo dichiariamo fuori dal pannello, ma noi eseguiamo la chiamata "pannello.cancella", come se il pulsante fosse all'interno del pannello, mentre invece nel pannello c'è solo la chiamata all'evento... perchè è così? o_O

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Perché altrimenti dovevi dichiarare il pulsante static...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.