Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150

    [Swing] Problema classe extend

    Ciao a tutti, sto iniziando , grazie ad una guida, a cercare di capire come funzioni il Java Swing.

    Stavo cercando di personalizzare il JFrame definendo una nuova classe, che e' la seguente:


    Codice PHP:
    public class MyFrame extends JFrame{
        public 
    MyFrame ()
        {
            
    super ();setBounds (200,100,300,150);
        }
        
        public 
    MyFrame (String titolo)
        {
            
    super (titolo);
            
    setBounds (200,100,300,150);
        }


    E questa e' la classe che usa il MyFrame:


    Codice PHP:
    import java.awt.*;
    import javax.swing.*;


    public class 
    EsSwing2 {
        public static 
    void main (String [] v)
        {
            
    MyFrame f = new MyFrame ("Esempio 2");
            
            
    // posizione (200,100) dimensione (300,150)
            
    f.show();
        }

    compilando la classe ricevo pero' diversi errori, tra cui:

    JFrame cannot be resolved to a type

    Qualcuno potrebbe spiegarmi questo errore?
    Il compilatore mi da errore su extends JFrame .
    Potreste aiutarmi?

  2. #2
    Ti manca l'import di javax.swing.JFrame nella classe MyFrame. In alternativa puoi scrivere:

    Codice PHP:
    public class MyFrame extends javax.swing.JFrame{
    ... 
    Al mio segnale... scatenate l'inferno!

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    ... e show() è deprecato, non lo devi usare. Usa setVisible(boolean)
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150
    Non ho capito cosa voglia dire "show e' deprecato".
    Dopo aver inserito l'import ora mi parte correttamente.

    Ho pero' un altro problema ovvero stavo cercando di disegnare su un pannello, modificando il JPanel originale.

    Il codice di MyPanel.java e' il seguente:
    Codice PHP:
    import javax.swing.*; 

    public class 
    MyPanel extends JPanel 
        public 
    void paintComponent (Graphics g
        { 
            
    super.paintComponent (g); 
            
    g.setColor (Color.red); 
                     
            
    g.fillRect (202010080); 
            
    g.setColor (Color.blue); 
            
    g.drawRect (30,30,80,60); 
            
    g.setColor (Color.black); 
            
    g.drawString ("ciao"5060); 
                 
        } 

    Il main invece e' il seguente:

    Codice PHP:
    import java.awt.*; 
    import javax.swing.*; 

    public class 
    EsSwing4 
        public static 
    void main (String[] v
        { 
            
    MyFrame f = new MyFrame ("Esempio 4"); 
             
            
    Container c f.getContentPane (); 
            
    MyPanel panel = new MyPanel (); 
            
    c.add (panel); 
            
    f.show (); 
        } 

    Quando lo compilo mi da errore sulla classe MyPanel.java, ovvero:

    - Color cannot be resolved (su tutti quanti i color)
    - Graphics cannot be resolved to a type

    Non capisco perche' mi dia questi errori.
    Potreste aiutarmi?

    Ciao

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Skaffa
    Non ho capito cosa voglia dire "show e' deprecato".
    Deprecato = obsoleto, sconsigliato .... da non usare più.

    La documentazione dice chiaramente di usare setVisible() invece di show().

    Originariamente inviato da Skaffa
    Quando lo compilo mi da errore sulla classe MyPanel.java, ovvero:

    - Color cannot be resolved (su tutti quanti i color)
    - Graphics cannot be resolved to a type
    import java.awt.*;

    anche in MyPanel.java.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150
    Grazie delle risposta.
    Ho eliminato il retrogrado f.show

    Altra domanda, continuo qui dato che non mi pare il caso di aprire un nuovo thread (ovviamente centrata sempre su Swing).

    Vorrei caricare in un pannello un immagine .gif presente nel mio hd.
    Il codice e' il seguente:


    Codice PHP:
    public class ImgPanel extends JPanel {
        
    Image img1;

        public 
    ImgPanel ()
        {
            
    Toolkit tk Toolkit.getDefaultToolkit ();
            
    img1 tk.getImage ("new.gif");
            
    MediaTracker mt = new MediaTracker (this);
            
    mt.addImage (img1,1);

            try { 
    mt.waitForAll();}
            catch (
    InterruptedException e) {}

        }

        public 
    void paintComponent (Graphics g)
        {
            
    super.paintComponent (g);
            
    g.drawImage (img13030null);

         }


    Il main, semplice, e' il seguente:


    Codice PHP:
    import java.awt.*;
    import javax.swing.*;

    public class 
    EsImg {
        public static 
    void main (String[] v)
        {
            
    MyFrame f = new MyFrame ("prova");

            
    Container c f.getContentPane ();
            
    ImgPanel p = new ImgPanel ();
            
    c.add (p);

            
    f.setVisible (true);


        }


    Il codice non da errori, eseguo il tutto ma mi visualizza solo il pannello.
    Ovviamente il motivo e' perche' non trova l'immagine.
    Ora la domanda quindi: per caricare un immagine, in quale cartella va messa per poterla caricare?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Skaffa
    Il codice non da errori, eseguo il tutto ma mi visualizza solo il pannello.
    Ovviamente il motivo e' perche' non trova l'immagine.
    Ora la domanda quindi: per caricare un immagine, in quale cartella va messa per poterla caricare?
    La tua specifica del nome del file è relativa alla "current working directory". Questa è la directory che è "corrente" nel momento in cui è stata avviata la JVM. Quale sia esattamente dipende da come/da dove è stata avviata la applicazione (linea di comando? un IDE? ecc...).

    Se la immagine e fissa e "fa parte" della tua applicazione, considera eventualmente di caricare la immagine come "risorsa" (spiegato qui sul tutorial della Sun, anche se lì poi otteneva un ImageIcon .... ma il concetto di risorsa è sempre quello).

    P.S. Hai usato il Toolkit per caricare la immagine e hai usato MediaTracker per attendere il completamento del caricamento. È corretto ... non ti sto dicendo che è sbagliato. Se vuoi però puoi evitare l'attesa e visualizzare "progressivamente" la immagine facendo il paint con:

    g.drawImage (img1, 30, 30, this);

    L'ultimo parametro è l'Observer. Il tuo panel quindi fa da "osservatore". Quindi anche se il caricamento è asincrono (senza il MediaTracker) la immagine si carica e visualizza correttamente man mano che serve.
    Questa tecnica (notificare il pannello che visualizza la immagine) è poi indispensabile se la GIF è "animata"!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150
    Domanda sulle key bind.
    Ho il seguente main:


    Codice PHP:
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import javax.swing.AbstractAction;
    import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JToolBar;
    import javax.swing.KeyStroke;
    import javax.swing.border.BevelBorder;
    import javax.swing.border.EtchedBorder;


    public class 
    ActionExample extends JPanel {
        public 
    JMenuBar menuBar;
        public 
    JToolBar toolBar;

        public 
    ActionExample ()
        {
        
    super (true);

        
    menuBar = new JMenuBar ();
        
    menuBar.setBorder (new BevelBorder (BevelBorder.RAISED));

        
    JMenu menu = new JMenu ("Menu");
        
    menuBar.add (menu);

        
    // create a toolbar and give it an etched(impresso, inciso) border
        
    toolBar = new JToolBar ();
        
    toolBar.setBorder(new EtchedBorder());
        
        
    SampleAction exampleAction = new SampleAction ("Download", new ImageIcon ("action.gif"));

        
    JMenuItem exampleItem = new JMenuItem (exampleAction);
        
    JButton exampleButton = new JButton (exampleAction);
        
    menu.add (exampleItem);
        
    toolBar.add (exampleButton);

        
    exampleButton.getActionMap().put ("Download"exampleAction);
        
    exampleButton.getInputMap(WHEN_IN_FOCUSED_WINDOW).put(
                
    KeyStroke.getKeyStroke("F8"), "Download");



        }

        class 
    SampleAction extends AbstractAction {
         public 
    SampleAction (String textIcon icon)
        {
        
    super (texticon);
        }

        public 
    void actionPerformed (ActionEvent e)
        {
        
    System.out.println ("Action [" e.getActionCommand() + "] performed!");
        }
    }

        public static 
    void main (String s[])
        {
            
    ActionExample example = new ActionExample ();
            
    JFrame frame = new JFrame ("Action Example");
            
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
            
    frame.setJMenuBar (example.menuBar);
            
    frame.getContentPane().add(example.toolBarBorderLayout.NORTH);
            
    frame.setSize(200,200);
            
    frame.setVisible(true);


        }

    Perche', premendo F8, ricevo come output la stringa:

    Action [null] performed!

    Quando dovrei ricevere la stringa

    Action [Download] performed!

    Non riesco a capire..

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Skaffa
    Perche', premendo F8, ricevo come output la stringa:

    Action [null] performed!

    Quando dovrei ricevere la stringa

    Action [Download] performed!

    Non riesco a capire..
    Il "source" dell'evento è effettivamente il pulsante nella cui ActionMap hai messo la tua action. Solo che il actionCommand non arriva dal pulsante! Invece è quello della action, che non hai impostato. Vedi putValue() di AbstractAction e la key ACTION_COMMAND_KEY.

    Se quello che volevi è che ricevesse l'actionCommand dal pulsante ... no, non funziona così.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150
    Mmmm sai che nn ho ben capito il perche'?

    Queste righe di codice:

    public void actionPerformed (ActionEvent e)
    {
    System.out.println ("Action [" + e.getActionCommand() + "] performed!");
    }

    Cosa fanno?Ed e come mai e' null?

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 © 2026 vBulletin Solutions, Inc. All rights reserved.