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

    [JAVA] Posizionare oggetti in un JFrame

    Ciao a tutti,
    avrei bisogno di qualche consiglio.

    Devo creare un gioco dell'oca in java con GUI: ho creato un campo in PS e l'ho impostato come sfondo di gioco. La mia idea era quella di creare, poi, delle pedine e farle muovere sopra lo sfondo.

    il mio quesito è questo.
    devo inserire un JButton in alto a destra della finestra e sotto ad esso una immagine che mi indica il numero del dado uscito, cosa posso utilizzare per posizionare il bottone in quel punto? (l'immagine per ora non mi interessa dato che devo ancora fare il listener per il dado).

    ho provato a fare questo ma non funziona, il bottone mi appare in alto al centro della finestra.

    codice:
    
    package gamegoose;
    
    
    import java.awt.*;
    import javax.swing.*;
    
    
    public class GameGoose extends JFrame{
        
        private String path= "img/sfondo1.jpg";
        JButton dado;
        JPanel pannelloDado;
        
        public GameGoose(){
            setLayout(new BorderLayout());
            setContentPane(new JLabel(new ImageIcon(path)));
            setLayout(new FlowLayout());
            
            pannelloDado = new JPanel(new FlowLayout(FlowLayout.RIGHT));
            dado = new JButton("Lancia dado");
            pannelloDado.add(dado);
            add(pannelloDado, BorderLayout.NORTH);
            
            setTitle("Game of the Goose");
            setSize(1336, 768);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setVisible(true);
            
        }
        public static void main(String[] args) {
            new GameGoose();
            
        }
        
    }
    P.S. -> non sono un esperto di java, ho solo conoscenze di base in questo linguaggio.
    Ultima modifica di akito996; 02-06-2015 a 14:13

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da akito996 Visualizza il messaggio
    Devo creare un gioco dell'oca in java con GUI: ho creato un campo in PS e l'ho impostato come sfondo di gioco. La mia idea era quella di creare, poi, delle pedine e farle muovere sopra lo sfondo.
    Non è molto buono il fatto di impostare come content-pane un JLabel. Il content-pane deve fare da "contenitore" per N altri componenti mentre invece JLabel non è generalmente pensato per tale obiettivo.
    Ci sono altre tecniche migliori (ma richiedono un minimo di competenza su Swing) per avere una immagine di "sfondo".

    Quote Originariamente inviata da akito996 Visualizza il messaggio
    devo inserire un JButton in alto a destra della finestra e sotto ad esso una immagine che mi indica il numero del dado uscito, cosa posso utilizzare per posizionare il bottone in quel punto?
    Se hai una "tavola" da gioco e devi visualizzare oggetti in posizioni arbitrarie, allora può aver senso usare il posizionamento "assoluto" (senza layout manager).
    Ma se hai altri componenti, che non fanno parte della tavola del gioco, non necessariamente devi far rientrare questi nel posizionamento assoluto. Insomma, sarebbe meglio sfruttare comunque qualche layout manager.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ho usato un altro tipo di approccio per caricare l'immagine utilizzando JPanel, Toolkit e MediaTracker e sono riuscito a posizionare il mio bottone all'incirca nella posizione in cui volevo.

    Grazie per l'aiuto!

    Questo è il codice che ho scritto.

    codice:
    package gamegoose;
    
    
    import java.awt.*;
    import javax.swing.*;
    import static javax.swing.JFrame.EXIT_ON_CLOSE;
    
    
    public class GameGoose extends JPanel{
        
        private String path= "img/sfondo1.jpg";
        private Image img;
        
        public GameGoose(){
            img = Toolkit.getDefaultToolkit().createImage(path);
            load(img);
        }
        private void load(Image img){
            try{
                MediaTracker mt = new MediaTracker(this);
                mt.addImage(img, 0);
                mt.waitForAll(0);
            }
            catch (InterruptedException e){
                e.printStackTrace();
            }
        }
        protected void paintComponent(Graphics g){
            super.paintComponent(g);
            setOpaque(false);
            g.drawImage(img, 0, 0, null);
        }
        
        
        public static void main(String[] args) {
            JFrame f = new JFrame("Game of the Goose");
            GameGoose field= new GameGoose();
            
            field.setLayout(new FlowLayout(FlowLayout.RIGHT));
            field.add(new Dado(), BorderLayout.EAST);
            
            f.getContentPane().add(field);
            f.setSize(1336, 768);
            f.setDefaultCloseOperation(EXIT_ON_CLOSE);
            f.setVisible(true);
            
        }
        
    }

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    L'uso del MediaTracker e la attesa del caricamento si può anche omettere se usi:

    g.drawImage(img, 0, 0, this);

    in modo che il pannello faccia da "observer" durante il caricamento asincrono fatto dal framework.

    Il setOpaque(false) andrebbe fatto una-tantum (es. nel costruttore), non nel paintComponent.
    Ah e perché ti serve non-opaco??
    Ultima modifica di andbin; 02-06-2015 a 16:08
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    no il setOpaque è stato un errore di battitura... (non so cosa serve) ahaha

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.