Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Monopoly game

  1. #1

    Monopoly game

    Ragazzi ho un problema con il gioco del Monopoly.
    Ho creato un Jframe con Menu e toolbar(causa del mio problema), all'interno del frame inserisco un Jpanel con la tavola da gioco su cui mediante Graphics ci disegno sopra le pedine con g.filloval(...)...non appena però il mouse viene spostato su un bottone della mia toolbar il disegno fatto da paint(Graphics), mi scompare e mi riappare soltanto se vado ad ingrandire il frame . Come mai??? a cosa è dovuto sto problema?....vi prego rispondete numerosi

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Monopoly game

    Originariamente inviato da tarbiuth
    Come mai??? a cosa è dovuto sto problema?
    Bisognerebbe vedere il codice completo ... senza risulta un tantino difficile trovare il problema!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    ecco il codice

    ecco il codice incriminato:......sicuramente avrai problema per le immagini che non verranno caricate :


    package Swing;
    import java.awt.BasicStroke;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.geom.Rectangle2D;

    import javax.swing.*;

    import Tavola.Tavola;

    /**
    * @author Angelo
    *
    */
    @SuppressWarnings("serial")
    public class MainFrame extends JFrame {

    /**
    * Istanza della barra dei menù
    */
    private JMenuBar menuBar;

    /**
    * Istanza della toolBar
    */
    private JToolBar toolBar;

    /**
    * Indirizzo Icona per il comando Help
    */
    private String iconHelpAddress = "Icone/Help.png";

    /**
    * Indirizzo Icona per il comando di uscita dal gioco
    */
    private String iconExitAddress = "Icone/Chiudi.png";

    /**
    * Indirizzo Icona per il comando di terminazione della Partita
    */
    private String closeFileImageAddress = "Icone/Esci.png";

    /**
    * Indirizzo Icona per il comando di visualizzazione delle transazioni
    */
    private String transazioniImageAddress = "Icone/Transazioni.png";

    /**
    * Indirizzo Icona per il comando salva Partita
    */
    private String saveImageAddress = "Icone/Salva.png";

    /**
    * Indirizzo Icona per il comando Carica Partita
    */
    private String openImageAddress = "Icone/carica.png";

    /**
    * Indirizzo Icona per il comando Nuova Partita
    */
    private String newImageAddress = "Icone/nuovaj.png";

    ImagePanel panelTavola;


    /**
    * Metodo di apertura della finestra
    */
    public static void main(String[] args) {
    MainFrame inst = new MainFrame();
    inst.setLocationRelativeTo(null);
    inst.setVisible(true);


    }
    /**
    * Costruttore: chiama il supercostruttore per istanziare un frame di nome Monopoly 2009

    * Aggiunge tutti gli elementi grafici necessari al frame
    */
    public MainFrame() {
    super("Monopoly 2009");
    initGUI();

    }

    /**
    * Aggiunge tutti gli elementi grafici necessari al frame
    */
    private void initGUI() {

    try {
    // Creazione degli elementi utilizzati nella barra dei menu e nella toolBar
    DemoAction newAction = new DemoAction("Nuova Partita", new ImageIcon(newImageAddress), "Crea nuova partita", 'N');
    DemoAction opentAction = new DemoAction("Carica Partita", new ImageIcon(openImageAddress), "Carica partita salvata", 'C');
    DemoAction viewAction= new DemoAction("Visualizza Transazioni",new ImageIcon(transazioniImageAddress),"Visualizza transazioni",'T');
    DemoAction saveAction = new DemoAction("Salva",new ImageIcon(saveImageAddress), "Salva", 'S');
    DemoAction terminaAction =new DemoAction("Termina Partita", new ImageIcon(closeFileImageAddress),"Termina partita",'X');
    DemoAction helpAction =new DemoAction("Help",new ImageIcon(iconHelpAddress),"Aiuto",'A');
    DemoAction exitAction = new DemoAction("Esci", new ImageIcon(iconExitAddress), "Esci dal gioco", 'E');


    this.setSize(1024,728);
    //costruzione barra del menù

    menuBar = new JMenuBar();

    // menu File
    JMenu MenuFile = new JMenu("File");
    MenuFile.add(newAction);
    MenuFile.add(opentAction);
    MenuFile.add(saveAction);
    MenuFile.add(terminaAction);
    MenuFile.addSeparator();
    MenuFile.add(exitAction);

    //menu Visualizza
    JMenu Visualizza = new JMenu("Visualizza");
    Visualizza.add(viewAction);
    // menu Help
    JMenu About = new JMenu("Help");
    About.add(helpAction);

    //aggiunge i menu alla barra dei menu
    menuBar.add(MenuFile);
    menuBar.add(Visualizza);
    menuBar.add(About);
    // Aggiunge la barra dei menu al frame
    this.setJMenuBar(menuBar);

    //costruzione toolbar

    toolBar = new JToolBar("");
    toolBar.add(newAction);
    toolBar.add(opentAction);
    toolBar.add(saveAction);
    toolBar.add(viewAction);
    toolBar.add(terminaAction);
    toolBar.add(helpAction);
    toolBar.addSeparator();
    toolBar.add(exitAction);

    // Aggiunge la toolBar al Frame

    getContentPane().add(toolBar,BorderLayout.NORTH);
    toolBar.setPreferredSize(new java.awt.Dimension(392, 36));


    } catch (Exception e) {
    e.printStackTrace();
    }
    //aggiunge l'immagine della tavola da gioco
    panelTavola = new ImagePanel(new ImageIcon("Tavola/Tavola.png").getImage());
    panelTavola.setOpaque(true);
    getContentPane().add(panelTavola, BorderLayout.WEST);


    //Aggiunge il pannello dei comandi


    }
    //verrà re-paintata ogni volta con gli aggiornamenti sul colore del proprietario
    //da premettere che la colorazione deve essere fatta dinamicamente e non staticamente come fatta da me
    public void paint(Graphics g)
    {
    Graphics2D g2d = (Graphics2D)g;
    //dim north()
    //dim west (80,48)
    //disegna south_hotel

    g2d.setColor(Color.yellow);
    g2d.fillOval(565, 665, 20, 20) ;
    g2d.setColor(Color.green);
    g2d.fillOval(565, 685, 20, 20) ;
    g2d.setColor(Color.magenta);
    g2d.fillOval(565, 705, 20, 20) ;
    g2d.setColor(Color.blue);
    g2d.fillOval(585, 665, 20, 20) ;
    g2d.setColor(Color.red);
    g2d.fillOval(585, 685, 20, 20) ;
    g2d.setColor(Color.cyan);
    g2d.fillOval(585, 705, 20, 20) ;



    }

    // ********** classi annidate ***********//////////

    /**
    * Title : DemoAction
    * Classe privata per l'astrazione degli elementi grafici presenti nella menuBar e nella toolBar
    */
    private class DemoAction extends AbstractAction {


    public DemoAction(String text, Icon icon, String description,char accelerator) {
    super(text, icon);
    putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(accelerator,Toolkit.getDefa ultToolkit().getMenuShortcutKeyMask()));
    putValue(SHORT_DESCRIPTION, description);
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub

    }

    }

    private class ImagePanel extends JPanel {

    private Image img;

    public ImagePanel(String img) {
    this(new ImageIcon(img).getImage());
    }

    public ImagePanel(Image img) {
    this.img = img;
    Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
    setPreferredSize(size);
    setMinimumSize(size);
    setMaximumSize(size);
    setSize(size);
    setLayout(null);
    }

    public void paintComponent(Graphics g) {
    g.drawImage(img, 0, 0, null);
    }

    }
    }

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: ecco il codice

    Originariamente inviato da tarbiuth
    ecco il codice incriminato:......sicuramente avrai problema per le immagini che non verranno caricate :
    No ... non ho avuto bisogno di compilare/eseguire nulla .... il problema si capisce molto bene già solo leggendo il codice.

    Hai esteso JFrame e nella classe hai fatto l'override di paint(Graphics g). Che tecnicamente sarebbe corretto. Infatti è vero che i componenti Swing hanno il paint() (lo "ereditano" da AWT) ma è anche vero che in Swing la gestione del painting è stata rivista e cambiata un pochino. A tal riguardo ti suggerisco di leggere sul tutorial:

    A Closer Look at the Paint Mechanism

    In sostanza non si dovrebbe fare l'override di paint() (a meno di sapere esattamente che cosa si sta facendo e il perché ....) ma di paintComponent()

    In ogni caso c'è il fatto che nel content pane del JFrame hai dei componenti e .... al tempo stesso vorresti disegnare sul Graphics del JFrame. Cosa che ovviamente non è molto consigliabile!!

    Quindi il consiglio è: non disegnare sul JFrame ma su un "tuo" pannello apposito. Concettualmente come hai fatto per quel ImagePanel.


    P.S. se posti codice, mettilo tra i tag CODE e sopratutto ricordati di scrivere il codice ben indentato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.