Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1

    [JAVA] modificare figure con interfaccia utente

    Ciao a tutti, da tempo sto cercando di creare un'applicazione che modifica un rettangolo usando un interfaccia utente.
    Questa è la prima vera applicazione che tento di creare da solo e il risultato non è stato quello previsto: dal punto di vista grafico tutto è perfetto ma usando checkbox e altri bottoni non succede niente.

    Come posso farlo funzionare?
    Questo è il codice
    codice:
    //tutti gli import
    
    class Frame extends JFrame	
    {	public Frame()
    	{	setSize(500, 500);
    		setTitle("framequattro :-)");
    		
    		addWindowListener(new Chiusore());
    		
    		//ometto la creazione di un menù 					
    		Container cont_generale = getContentPane();
    		
    		//creo pannello per il rettangolo
    		pannelloRettangolo = new PannelloRettangoli();
    		cont_generale.add(pannelloRettangolo, "Center");
    		
    		controlli = new JPanel();
    		//metodi x creare il bordo
    		controlli.setBorder(new TitledBorder(new EtchedBorder(), "Preferenze"));
    		cont_generale.add(controlli, "South");
    		
    		//menù a tendina
    		tendina = new JComboBox();
    		tendina.addItem("Nero");
    		tendina.addItem("Rosso");
    		tendina.addItem("Blu");
    		controlli.add(tendina);
    		
    		//checkbox
    		riempito = new JCheckBox("Riempi");
    		controlli.add(riempito);
    		
    		//radio button
    		uno = new JRadioButton("20x30");
    		due = new JRadioButton("30x40");
    		tre = new JRadioButton("40x50");
    		ButtonGroup radio = new ButtonGroup();
    		radio.add(uno);
    		radio.add(due);
    		radio.add(tre);
    		controlli.add(uno);
    		controlli.add(due);
    		controlli.add(tre);
    		uno.setSelected(true);
    		
    		//intercettatori
    		Ascoltatore spia = new Ascoltatore();
    
    		esci.addActionListener(spia);
    		su.addActionListener(spia);
    		giu.addActionListener(spia);
    		destra.addActionListener(spia);
    		sinistra.addActionListener(spia);
    		tendina.addActionListener(spia);
    		casuale.addActionListener(spia);
    		uno.addActionListener(spia);
    		due.addActionListener(spia);
    		tre.addActionListener(spia);
    		riempito.addActionListener(spia);
    		
    	}
    
    	private class Ascoltatore implements ActionListener
    	{	public void actionPerformed(ActionEvent event)
    		{	//cosa abbiamo cliccato?
    			Object sorgente = event.getSource();
    			
    			if(sorgente == tendina)
    				pannelloRettangolo.cambiaColore(tendina);
    			else if(sorgente == riempito)	
    				pannelloRettangolo.riempi();
    			else if(sorgente == uno)
    				pannelloRettangolo.cambiaDimensioni(20, 30);
    			else if(sorgente == due)
    				pannelloRettangolo.cambiaDimensioni(30, 40);
    			else if(sorgente == tre)
    				pannelloRettangolo.cambiaDimensioni(40, 50);
    		}		
    	}
    
    	private class Chiusore extends WindowAdapter
    	{	public void windowClosing(WindowEvent event)
    		{	System.exit(0);
    		}
    	}	
    	
    	private JPanel controlli;
    	private JComboBox tendina;
    	private JCheckBox riempito;
    	private JRadioButton uno;
    	private JRadioButton due;
    	private JRadioButton tre;
    	public PannelloRettangoli pannelloRettangolo;
    }	
    
    class PannelloRettangoli extends JPanel
    {	public PannelloRettangoli()
    	{	larghezza = 20;
    		altezza = 30;
    		rettangolo = new Rectangle(0, 0, larghezza, altezza);
    		setBackground(Color.yellow);
    	}
    	
    	public void paintComponent(Graphics g)
    	{	super.paintComponent(g);
    		g2 = (Graphics2D)g;
    		g2.draw(rettangolo);
    	}
    	
    	public void cambiaColore()
    	{	String selezionato = (String)tendina.getSelectedItem();
    		if(selezionato == "Nero")
    			colore = new Color(0.0F, 0.0F, 0.0F); 
    		else if(selezionato == "Blu")
    			colore = new Color(0.0F, 0.0F, 1.0F);
    		else if(selezionato == "Rosso")	
    			colore = new Color(1.0F, 0.0F, 0.0F);
    				
    		g2.setColor(colore);
    		repaint();
    	}
    	
    	public void riempi()
    	{	g2.fill(rettangolo);
    		repaint();
    	}
    	
    	public void cambiaDimensioni(int x, int y)
    	{	altezza = y;
    		larghezza = x;
    		repaint();
    	}
    	
    	
    	
    	public Graphics2D g2;
    	private Rectangle rettangolo;
    	public int larghezza;
    	public int altezza;
    	private Color colore;	
    }
    Grazie in anticipo a tutti

  2. #2
    qualcuno almeno mi potrebbe dire la logica con la quale dovrei affrontare il problema???

  3. #3
    allora sinceramente non ho letto tutto il codice, mi sono fermato all'aggiunta degli ascoltatori.

    io di solito implementavo gli ascoltatori al volo così:

    codice:
     JButton.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
    //codice
                }
            });

  4. #4
    grazie,
    ho provato ma comunque non funziona...
    penso che il problema non sia lì ma nei metodi per ridisegnare.

  5. #5
    scusami nel weekend ho resettato le cervella :P

    ricapitolami tutti, se alla pressione dei pulsanti ti generi un qualche errore o cose del genere.

    P.S.: hai fatto un "revalidate" postmodifiche del jpanel?

  6. #6
    quando premo sui bottoni non succede nulla, per questo penso di aver sbagliato qualcosa di radicale..

    Ho provato ha inserire dei revalidate, ma oltre a non sapere bene come usarli non cambiava niente.

    Grazie ancora

  7. #7
    aspetta che sto avendo giornate terribili a lavoro.

    appena ho 5 minuti oggi mi leggo il codice e vediamo di risolvere

  8. #8
    grazie mille

  9. #9
    codice:
    if(sorgente == tendina)
    				pannelloRettangolo.cambiaColore(tendina);
    			else if(sorgente == riempito)	{
    				pannelloRettangolo.riempi();
                                    pannelloRettangolo.revalidate();
                            }
    			else if(sorgente == uno){
    				pannelloRettangolo.cambiaDimensioni(20, 30);
                                    pannelloRettangolo.revalidate();
                            }
    			else if(sorgente == due){
    				pannelloRettangolo.cambiaDimensioni(30, 40);
                                    pannelloRettangolo.revalidate();
                            }
    			else if(sorgente == tre){
    				pannelloRettangolo.cambiaDimensioni(40, 50);
                                    pannelloRettangolo.revalidate();
                            }
    }
    provato così?

  10. #10
    grazie ancora...


    continua a non funzionare,
    proprio non mi considera i comandi per modificare il rettangolo..
    se inserisco un System.out.println nei metodi per la modifica funzionano benissimo, il problema deve essere il modo con cui cerco di cambiarli...

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.