Inserendo un bottone sparisce lo sfondo O.O

di il
7 risposte

Inserendo un bottone sparisce lo sfondo O.O

Innanzitutto salve a tutti, sono iscritta da un po', ma è la prima volta che scrivo
Vi premetto che ho una conoscenza base del linguaggio java, soprattutto orientata al problem solving e non alle interfacce grafiche, quindi sto' seguendo un approccio alla "parasca"...man mano che mi servono le cose, mi pongo il problema di documentarmi a riguardo..ed è l'ora dei layout e dei bottoni...

Il mio problema è il seguente...mi sono fatta la mia bella JFrame, settato le dimensioni e messo un immagine di sfondo...e fin qui no problem...poi mi son detta, è giunta l'ora di inserire qualche bottone...ed è stato il caos.
Inserivo un bottone e questo egoisticamente si prendeva tutto lo spazio disponibile O.O Dopo un pochino ho intuito che era questione di Layout, che non avevo impostato, quindi probabilmente si attivava quello di default...a me non serve un layout, a me serve di poter prendere bottone per bottone, dargli la dimensione e dirgli la posizione...beh non ci riesco..gli do' la dimensione ma in tutta la finestra sparisce l'immagine di sfondo che avevo messo!

Vi scrivo a grandi linee il codice:
window = new JFrame("Tressette");
		
		Container cont = window.getContentPane();
		cont.setLayout(null);
		
		window.setSize(1280,800);
		window.setResizable(false);
		window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		Background sfondo = new Background(url);
		cont.add(sfondo);

		bottone.setSize(100,100);
		cont.add(bottone);
		
		window.setVisible(true);
Per ora non gli ho detto in che posizione lo voglio perché non ha importanza...comunque fatto sta che l'immagine di sfondo non c'è più...help help

7 Risposte

  • Re: Inserendo un bottone sparisce lo sfondo O.O

    Allora, senza polemica...IL JFrame

    vabbè a parte gli scherzi, l'approccio alla parasca "potrebbe" andare anche bene se non fai progetti in team e se non fai qualcosa di sofsticato....chiunque si trova ad affrontare problemi nuovi ogni tanto, quindi è normale documentarsi progressivamente. però alcuni concetti basi bisogna averli chiari. I LayoutManager per le interfacce grafiche sono come il pane e l'acqua per noi. Senza comprendere bene i layout avrai sempre difficoltà a lavorarci.


    ora io non ho letto il tuo codice, però ti spiego "al volo" come funziona, a te gli approfondimenti.
    Considera che la finestra è un contenitore, che in linea di default mostra "l'ultima" cosa inserita. tu dici che quando aggiungi il pulsante, sparisce lo sfondo, prova a fare il contrario....dovrebbe sparire il pulsante e rimanere solo lo sfondo. questo perchè non hai selezionato un layout che permetta di gestire "più componenti" sulla stessa finestra. Nel tuo caso specifico, poi, il disegno di sfondi su pannelli che poi dovranno andare ad interfacciarsi tra di loro, è ancora "peggio".

    Mi spiego: la fase di "disegno" del pannello è delegata al metodo paintCompoent. tu non hai la più pallida idea di come funzioni, ma per poter "disegnare" un pannello specifico, devi interfacciarti per forza di cose con questo meccanismo. In pratica tu devi creare una nuova classe, che chiamerai "PannelloSfondoParasca" e che avrà al suo interno la ridefinizione del metodo paintCOmponent.

    a questo punto quando andrai ad agiungere al frame il pannello, lui nsaprà che deve disegnare quel pannello, e andrà ad aggiungere i componenti con "la solita tecnica".

    ti copio il codice di un pannello con gradienti fatto da me:
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package graphicComponent;
    
    import core.PersonaGenerica;
    import java.awt.Color;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import javax.swing.JComponent;
    import javax.swing.JPanel;
    import javax.swing.plaf.ComponentUI;
    import javax.swing.plaf.basic.BasicPanelUI;
    
    /**
     *
     * @author Utente1
     */
    public class GraficaJPanelPersone extends BasicPanelUI implements java.io.Serializable,
            MouseListener, KeyListener {
    
        private final static GraficaJPanelPersone m_pannelloUI = new GraficaJPanelPersone();
    
        public static ComponentUI createUI(JComponent c) {
            return m_pannelloUI;
        }
    
        public GraficaJPanelPersone(PersonaGenerica persona) {
            super();
        }
    
        public GraficaJPanelPersone() {
        }
    
        @Override
        public void installUI(JComponent c) {
            super.installUI(c);
            c.addMouseListener(this);
            c.addKeyListener(this);
        }
    
        @Override
        public void uninstallUI(JComponent c) {
            super.uninstallUI(c);
            c.removeMouseListener(this);
            c.removeKeyListener(this);
        }
    
        @Override
        public void paint(Graphics graphic, JComponent c) {
            Graphics2D g = (Graphics2D) graphic;
            JPanel d = (JPanel) c;
            Color bluScuro = new Color(0, 0, 131);
            Color celesteScuro = new Color(148, 203, 227);
            Color celeste = new Color(64, 128, 227);
            GradientPaint gradient;
            //coloro il centro
            gradient = new GradientPaint(d.getWidth() / 2, d.getHeight() / 2, celesteScuro, 0, 0, celeste, true);
            g.setPaint(gradient);
            g.fillRect(0, 0, d.getWidth(), d.getHeight());
            gradient = new GradientPaint(d.getWidth() / 2, d.getHeight() / 2, celesteScuro, d.getWidth(), 0, celeste, true);
            g.setPaint(gradient);
            g.fillRect(0, 0, d.getWidth(), d.getHeight());
            gradient = new GradientPaint(d.getWidth() / 2, d.getHeight() / 2, celesteScuro, 0, d.getHeight(), celeste, true);
            g.setPaint(gradient);
            g.fillRect(0, 0, d.getWidth(), d.getHeight());
            gradient = new GradientPaint(d.getWidth() / 2, d.getHeight() / 2, celesteScuro, d.getWidth(), d.getHeight(), celeste, true);
            g.setPaint(gradient);
            g.fillRect(0, 0, d.getWidth(), d.getHeight());
            //coloro i 4 angoli
            gradient = new GradientPaint(10, 10, celeste, 0, 0, bluScuro, true);
            g.setPaint(gradient);
            g.fillRect(0, 0, 10, 10);
            g.fillRect(d.getWidth() - 10, 0, 10, 10);
            g.fillRect(0, d.getHeight() - 10, 10, 10);
            g.fillRect(d.getWidth() - 10, d.getHeight() - 10, 10, 10);
        }
    
        @Override
        public void mouseClicked(MouseEvent e) {
        }
    
        @Override
        public void mousePressed(MouseEvent e) {
        }
    
        @Override
        public void mouseReleased(MouseEvent e) {
        }
    
        @Override
        public void mouseEntered(MouseEvent e) {
            /*
             * if(popup != null){ this.popup.setVisible(true);
             * this.popup.revalidate();
          }
             */
        }
    
        @Override
        public void mouseExited(MouseEvent e) {
            /*
             * if(popup != null){ this.popup.setVisible(false);
             *
             * }
             */
        }
    
        @Override
        public void keyTyped(KeyEvent e) {
        }
    
        @Override
        public void keyPressed(KeyEvent e) {
        }
    
        @Override
        public void keyReleased(KeyEvent e) {
        }
    }
    
    In questa classe io non estendo JPanel ma BasicUI perchè ho voluto cambiare lo schema di tutti i jpanel del software...è un discorso diverso. ma in linea generale (anche se cerchi in rete) la ridefinizione di un JPanel funziona allo stesso modo.

    Se hai dubbi....sparali
  • Re: Inserendo un bottone sparisce lo sfondo O.O

    Allora, diciamo che ho quasi risolto il problema..nel senso che i bottoni stanno sullo sfondo senza che questo scompaia..non sono riuscita a mettere i bottoni dove volevo io, probabilmente è questione di giocare un po' con i layout, ma me ne occuperò alla fine dei dettagli..preferisco cercare di portare a termine il tutto..
    Ho un altro problema, questa volta con gli ascoltatori..ho un pulsante esci, che se viene premuto deve chiedermi "Vuoi veramente uscire?" Se dico di si esce, sennò rimane tutto com'è...il codice dell'ascoltatore è questo:
    
    public class EsciEvent  implements MouseListener {
    	
    	public void mouseClicked(MouseEvent e) {
    		
    		int risposta = JOptionPane.YES_NO_OPTION;
    		JOptionPane.showConfirmDialog(null, "Vuoi davvero uscire dal gioco?");
    		
    		if (risposta==JOptionPane.YES_OPTION) {
    			System.exit(0);
    		}
    	}
    
    	@Override
    	public void mouseEntered(MouseEvent arg0) {}
    	@Override
    	public void mouseExited(MouseEvent arg0) {}
    	@Override
    	public void mousePressed(MouseEvent arg0) {}
    	@Override
    	public void mouseReleased(MouseEvent arg0) {}
    
    }
    
    Il problema è che qualunque cosa io scelta nella finestra del JOption, mi si chiude tutto.. O.o Non si chiude solo quando premo "si", ma anche se premo no o se chiudo la finestrella di scelta dalla x..
  • Re: Inserendo un bottone sparisce lo sfondo O.O

    
       public void mouseClicked(MouseEvent e) {
          
          int risposta = JOptionPane.showConfirmDialog(null, "Vuoi davvero uscire dal gioco?");
          
          if (risposta==JOptionPane.YES_OPTION) {
             System.exit(0);
          }
       }
    prova così
  • Re: Inserendo un bottone sparisce lo sfondo O.O

    Funziona, grazie mille..
  • Re: Inserendo un bottone sparisce lo sfondo O.O

    Aggiungo un'altra domanda già che ci sono...ho messo dei bottoni in un JPanel con Layout Flow, posizionato a sud di un Border...vorrei aumentare la dimensione dei bottoni e avevo pensato di farlo con il setSize..però non si ingrandiscono..
  • Re: Inserendo un bottone sparisce lo sfondo O.O

    Prova a settarli tutti...preferred size, minimun e maximum size.

    dovrebbe bastare solo il preferresSize, ma per sicurezza...
  • Re: Inserendo un bottone sparisce lo sfondo O.O

    Funziona -.- Grazie ^_^
Devi accedere o registrarti per scrivere nel forum
7 risposte