Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    396

    ridimensionamento automatico bottone

    Ciao a tutti.
    Utilizzo questo codice per ridimensionare automaticamente l'immagine nel JPanel a seconda della finestra che gli assegno.

    codice:
    protected void paintComponent(Graphics g) {
            if (img == null) {
                super.paintComponent(g);
            } else {
                int panelWidth = getWidth();
                int panelHeight = getHeight();
                int imageWidth = panelWidth;
                int imageHeight = panelHeight;
    
                 g.drawImage(img,0,0,imageWidth,imageHeight,null);
    
                    }
                }
    Come posso applicare lo stesso sistema ad un bottone???
    Che naturalmente contiene 3 immagini (normale,focused,pressed)

    Questo è il codice del bottone che assume le tre immagini:
    codice:
    public backgroundedButton(String localURL)
        {
            //recupero le 3 immagini (abilitato, cliccato e focalizzato) dall'URL relativo passato
            try
            {
                this.img = ImageIO.read(getClass().getResource(localURL));
                this.img_PRESSED  = ImageIO.read(getClass().getResource(localURL.substring(0, localURL.length()-4)+"_PRESSED.jpg"));
                this.img_FOCUSED  = ImageIO.read(getClass().getResource(localURL.substring(0, localURL.length()-4)+"_FOCUSED.jpg"));
            }
            catch (IOException ex)
            {System.out.print("Impossibile leggere l'immagine per creare il bottone \n");}
    
            //elimino il contenuto grafico ed il contorno di default del pulsante
            this.setContentAreaFilled(false);
            this.setFocusPainted(false);
    
            //imposto l'immagine di base
            this.setIcon(new javax.swing.ImageIcon(img));
    
            //imposto l'immagine visualizzata quando il mouse clicca sul pulsante
            this.setPressedIcon(new javax.swing.ImageIcon(img_PRESSED));
    
            //imposto l'immagine visualizzata quando il mouse passa sopra il pulsante
            this.setRolloverEnabled(true);
            this.setRolloverIcon(new javax.swing.ImageIcon(img_FOCUSED));
        }

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

    Re: ridimensionamento automatico bottone

    Originariamente inviato da Salinas
    Come posso applicare lo stesso sistema ad un bottone???
    Che naturalmente contiene 3 immagini (normale,focused,pressed)
    No ... non ci siamo. In che senso "lo stesso sistema"??? Innanzitutto nel pannello disegnavi tu la immagine .... nel JButton non disegni tu la immagine, setti solo le proprietà relative ai vari tipi di Icon.

    Se vuoi che il pulsante si dimensioni automaticamente in base alla dimensione della icona ... ok, ma il pulsante dovrebbe essere messo in un layout che rispetta il suo preferred size.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    396
    Se vuoi che il pulsante si dimensioni automaticamente in base alla dimensione della icona ... ok, ma il pulsante dovrebbe essere messo in un layout che rispetta il suo preferred size.
    Si voglio che si ridimensioni in base alle dimensioni dell'icona che ci applico, in modo che l'immagine sia visibile per intero e non solo in parte (in quanto più grande del pulsante).
    Come lo metto in un layout?
    Mi puoi fare un esempio, anche magari riprendendo il mio codice?

    grazie

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    codice:
    import java.awt.*;
    import java.net.*;
    import javax.swing.*;
    
    public class TestFrame extends JFrame {
        public TestFrame() {
            super("Test");
    
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            setSize(200, 120);
    
            Container contentPane = getContentPane();
    
            contentPane.setLayout(new FlowLayout());
    
            try {
                JButton b1 = new JButton(new ImageIcon(new URL("http://img383.imageshack.us/img383/4245/iconwink5sx.gif")));
                JButton b2 = new JButton(new ImageIcon(new URL("http://img190.imageshack.us/img190/3541/smilep.gif")));
    
                b1.setMargin(new Insets(0, 0, 0, 0));
                b2.setMargin(new Insets(0, 0, 0, 0));
    
                contentPane.add(b1);
                contentPane.add(b2);
            } catch (Exception e) {
                System.err.println(e);
            }
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new TestFrame().setVisible(true);
                }
            });
        }
    }
    I due pulsanti sono dimensionati "giusti" per contenere le due immagini. Questo succede perché i pulsanti sono messi in un FlowLayout, che "rispetta" il preferred dei componenti contenuti.
    Il setMargin() con Insets con tutti 0 serve a togliere il margine interno che per default esiste nei JButton.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    396
    Scusa ma un modo per ridimensionare l'immagine dentro il bottone, senza utilizzare il Jframe o un contenitore che lo ridimensioni, non esiste?

    Vorrei fare come ho fatto per il JPannel, ridimensiona lui stesso l'immagine che contiene, non ha bisogno di altro

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Salinas
    Scusa ma un modo per ridimensionare l'immagine dentro il bottone, senza utilizzare il Jframe o un contenitore che lo ridimensioni, non esiste?
    Senti .... non so più come dirlo ....

    I vari Icon che setti al JButton sono con quella dimensione e basta. Non sono queste immagini che si "adattano" al pulsante. Questo vuol dire che se hai una immagine sul pulsante di 10x10 e il pulsante, per motivi di layout è forzato a 80x80, la immagine non si allarga per coprire il pulsante!! Non è gestita questa cosa.
    Semmai è il pulsante che "può" adattarsi alla dimensione "giusta" da poter contenere la immagine. Perché il "preferred size" del JButton (supponendo niente testo) è la immagine, più l'eventuale spazio per il focus, più i margini interni, più i bordi.
    E se un layout manager rispetta il preferred size, la dimensione del pulsante è quanto ho detto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    396
    Il setMargin() con Insets con tutti 0 serve a togliere il margine interno che per default esiste nei JButton.
    Posso usare il setMargin() senza costruire il JFrame?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    396
    Cmq anche usandolo margin(), l'immagine non mi viene centrate bene...c'è la parte sinistra che viene un po tagliata.
    Ci sono altri parametri che posso aggiustare?

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Salinas
    Posso usare il setMargin() senza costruire il JFrame?
    Ma cosa centra JFrame con setMargin() che è dei pulsanti (in generale di AbstractButton)??? Come dire .... posso costruire una casa con stanze piccole senza costruire le pareti e il tetto?? Uguale ....

    Originariamente inviato da Salinas
    Cmq anche usandolo margin(), l'immagine non mi viene centrate bene...c'è la parte sinistra che viene un po tagliata.
    Ci sono altri parametri che posso aggiustare?
    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
    Jun 2008
    Messaggi
    396
    ecco il mio codice:
    codice:
    public class backgroundedButton extends javax.swing.JButton
    {
        private Image img;
        private Image img_PRESSED;
        private Image img_FOCUSED;
    
        public backgroundedButton(String localURL)
        {
            //recupero le 3 immagini (abilitato, cliccato e focalizzato) dall'URL relativo passato
            try
            {
                this.img = ImageIO.read(getClass().getResource(localURL));
                this.img_PRESSED  = ImageIO.read(getClass().getResource(localURL.substring(0, localURL.length()-4)+"_PRESSED.jpg"));
                this.img_FOCUSED  = ImageIO.read(getClass().getResource(localURL.substring(0, localURL.length()-4)+"_FOCUSED.jpg"));
            }
            catch (IOException ex)
            {System.out.print("Impossibile leggere l'immagine per creare il bottone \n");}
    
            //elimino il contenuto grafico ed il contorno di default del pulsante
            this.setContentAreaFilled(false);
            this.setFocusPainted(false);
    
            //imposto l'immagine di base
            this.setIcon(new javax.swing.ImageIcon(img));
    
            //imposto l'immagine visualizzata quando il mouse clicca sul pulsante
            this.setPressedIcon(new javax.swing.ImageIcon(img_PRESSED));
    
            //imposto l'immagine visualizzata quando il mouse passa sopra il pulsante
            this.setRolloverEnabled(true);
            this.setRolloverIcon(new javax.swing.ImageIcon(img_FOCUSED));
    
            super.setMargin(new Insets(0,0,0,0));
    
        }
    dimmi dove sbaglio

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.