Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Con la prima rete 5G Standalone attiva in Italia, WINDTRE compie un passo decisivo verso un modello di connettività intelligente che abilita scenari avanzati per imprese e pubbliche amministrazioni, trasformando la rete da infrastruttura a piattaforma per servizi a valore aggiunto
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro punta a diventare uno dei riferimenti assoluti nel segmento dei camera phone di fascia alta. Con un teleobiettivo Hasselblad da 200 MP, una batteria al silicio-carbonio da 7500 mAh e un display da 6,78 pollici con cornici ultra ridotte, il nuovo flagship non teme confronti con la concorrenza, e non solo nel comparto fotografico mobile. La dotazione tecnica include il processore MediaTek Dimensity 9500, certificazione IP69 e un sistema di ricarica rapida a 80W
DJI Romo, il robot aspirapolvere tutto trasparente
DJI Romo, il robot aspirapolvere tutto trasparente
Anche DJI entra nel panorama delle aziende che propongono una soluzione per la pulizia di casa, facendo leva sulla propria esperienza legata alla mappatura degli ambienti e all'evitamento di ostacoli maturata nel mondo dei droni. Romo è un robot preciso ed efficace, dal design decisamente originale e unico ma che richiede per questo un costo d'acquisto molto elevato
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-04-2012, 18:41   #1
Voltron
Senior Member
 
Iscritto dal: May 2004
Messaggi: 727
[Java]Bottone che non mostra il testo

Ciao a tutti.

Sto realizzando in Java un bottone con le seguenti caratteristiche :

- presenta un'immagine di sfondo in grado di autoridimensionarsi sulla base della dimensione del bottone

- mostra il nome del bottone sia all'interno del bottone stesso che come tooltip

Il problema è che la classe che ho realizzato, quando viene eseguita, mostra l'immagine all'interno del bottone ma fà sparire il testo all'interno dello stesso.

Qualcuno sa dirmi dove sbaglio?

Ecco il codice che ho realizzato :

Quote:
public class TButton extends JButton {

private Image image;
private ImageObserver imageObserver;

public TButton(){
super();

ImageIcon icon = new javax.swing.ImageIcon(JESToolbarButton.class.getResource("/data/imageBackground.jpg"));
image = icon.getImage();
imageObserver = icon.getImageObserver();
}

setMargin(new Insets(0, 0, 0, 0));
setLayout(null);
setText("START");
setToolTipText("premi quì per iniziare");
setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
this.setOpaque(true);
}

public void paint(Graphics g) {
super.paint(g);
g.drawImage(image, 0 , 0 , getWidth() , getHeight() , imageObserver);

}

}

Ultima modifica di Voltron : 13-04-2012 alle 18:47.
Voltron è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2012, 22:30   #2
Voltron
Senior Member
 
Iscritto dal: May 2004
Messaggi: 727
Nessuna idea? Nemmeno da quelli che fanno le guide swing...? Sto messo male allora.
Voltron è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2012, 00:01   #3
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
super.paint disegna il pulsante (testo incluso).

Poi col drawImage ci disegni sopra. Quindi non vedi il testo. Si chiama algoritmo del pittore (ogni istruzione di disegno è come una pennellata che copre la precedente).

Puoi disegnare prima l'icona e poi super.paint però a seconda delle impostazioni del pulsante e del look and feel è possibile che ti capiti l'inverso: si vede il pulsante ma non l'immagine.

Vai a colpo sicuro se usi Icon (l'interfaccia). Imposti l'allineamento del testo del pulsante rispetto all'icona a center (dovrebbe essere button.setHorizontalTextPosition) così la tua icona risulterà disegnata sotto al testo.

Un Icon è disegnato invocando il suo metodo paintIcon, il metodo riceve come primo argomento il componente a cui appartiene il Graphics da usare per riprodurre l'icona. Con quell'argomento Component puoi determinare la grandezza dell'immagine da disegnare, ottenendo la tua icona le cui dimensioni si adattano a quelle del pulsante.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2012, 08:28   #4
Voltron
Senior Member
 
Iscritto dal: May 2004
Messaggi: 727
Intanto ti ringrazio per l'esaustiva risposta!

Ho provato ad inverirtire le istruzioni 'paint' e 'drawimage' :

Quote:
public void paint(Graphics g) {
g.drawImage(image, 0 , 0 , getWidth() , getHeight() , imageObserver);
super.paint(g);
}
Ma, come da te ipotizzato, il testo viene comunque sovrascritto dall'immagine di sfondo.

Ho anche provato ad usare 'Icon' in questo modo :

Quote:
ImageIcon icon = (new javax.swing.ImageIcon(new javax.swing.ImageIcon(JESToolbarButton.class.getResource("/data/imageBackground.jpg"));
icon.setImage(icon.getImage().getScaledInstance( (int)getPreferredSize().getWidth(), (int)getPreferredSize().getHeight(), java.awt.Image.SCALE_REPLICATE )) ;
setIcon(icon);
Ma continua a non funzionare.....cortesemente, hai qualche suggerimento da potermi fornire ancora? Grazie.
Voltron è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2012, 09:04   #5
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Voilà:

Codice:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package test;

import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;


public class Test {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            
            public void run() {
                Test.start();
            }
        });
    }

    private static void start() {
        final Image image = new ImageIcon(Test.class.getResource("/icon.png")).getImage();;
        final Icon resizableIcon = new Icon() {

            @Override
            public void paintIcon(Component c, Graphics g, int x, int y) {
                g.drawImage(image, 0, 0, c.getWidth(), c.getHeight(), null);
            }

            @Override
            public int getIconWidth() {
                return image.getWidth(null);
            }

            @Override
            public int getIconHeight() {
                return image.getHeight(null);
            }
        };
        JFrame win = new JFrame("Hello");
        win.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        JButton button = new JButton("Press me!");
        button.setHorizontalTextPosition(JButton.CENTER);
        button.setIcon(resizableIcon);
        win.add(button);
        win.pack();
        win.setVisible(true);
    }
}
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2012, 09:24   #6
Voltron
Senior Member
 
Iscritto dal: May 2004
Messaggi: 727
Sei un Grande!! Funziona!!

Poichè ho l'esigenza di creare un mio oggetto bottone, ho implementato il tutto così :

Quote:
public class TButton extends JButton {


public TButton(JESToolbarItemDescriptor cJESToolbarItemDescriptor){
super();

final Image image = new ImageIcon(TButton.class.getResource("/data/TEST_BUTTONBACKGROUND.jpg")).getImage();
final Icon resizableIcon = new Icon() {

@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
g.drawImage(image, 0, 0, c.getWidth(), c.getHeight(), null);
}

@Override
public int getIconWidth() {
return image.getWidth(null);
}

@Override
public int getIconHeight() {
return image.getHeight(null);
}};

setIcon(resizableIcon);

setMargin(new Insets(0, 0, 0, 0));
setLayout(null);
setText("START");
setToolTipText("premi quì per iniziare");
setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
this.setVerticalAlignment(javax.swing.SwingConstants.CENTER);

}


}
Non voglio abusare della tua pazienza, ma, secondo te, c'è un modo per far sì che i bottoni si autoridimensionino sulla base del testo effettivamente inserito all'interno del bottone stesso? (voglio creare dei bottoni che poi aggiungerò ad un pannello che fungerà da "pseudo togglebutton")

Ultima modifica di Voltron : 16-04-2012 alle 09:35.
Voltron è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2012, 10:19   #7
Voltron
Senior Member
 
Iscritto dal: May 2004
Messaggi: 727
Al fine di aiutare tutti coloro che possano avere bisogno di un bottone che contenga una immagine di sfondo + del testo e che si autoridimensioni sulla base del testo inserito al suo interno, posto il codice che ho realizzato :

Quote:

public TButton(JESToolbarItemDescriptor descriptor){

super();
buttonDescriptor = descriptor;

if (buttonDescriptor.getPictureFile().compareTo("null") != 0) {
try {
image = new ImageIcon(TButton.class.getResource("/data/TEST_BUTTONBACKGROUND.jpg")).getImage();
resizableIcon = new Icon() {

@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
g.drawImage(image, 0, 0, c.getWidth(), c.getHeight(), null);
}

@Override
public int getIconWidth() {
return image.getWidth(null);
}

@Override
public int getIconHeight() {
return image.getHeight(null);
}};

setIcon(resizableIcon);

} catch (Exception e) {
e.printStackTrace();
}
}

setMargin(new Insets(0, 0, 0, 0));
setForeground(buttonDescriptor.getColor());
setText(descriptor.getCaption());
setToolTipTextdescriptor.getTooltipText());
setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
this.setVerticalAlignment(javax.swing.SwingConstants.CENTER);

}

@Override
public void setText(String arg0) {
super.setText(arg0);
FontMetrics metrics = getFontMetrics(getFont());
int width = metrics.stringWidth( getText() );
int height = metrics.getHeight();
Dimension newDimension = new Dimension(width+10,height+10);
setPreferredSize(newDimension);
setBounds(new Rectangle(getLocation(), getPreferredSize()));
}



}

Ringrazio ancora l'utente 'PGI-Bis' per il suo prezioso contributo senza il quale starei ancora brancolando nel buio.

Ultima modifica di Voltron : 16-04-2012 alle 10:22.
Voltron è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi Wind Tre 'accende' il 5G Standalone in Italia: s...
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
DJI Romo, il robot aspirapolvere tutto trasparente DJI Romo, il robot aspirapolvere tutto trasparen...
DJI Osmo Nano: la piccola fotocamera alla prova sul campo DJI Osmo Nano: la piccola fotocamera alla prova ...
FUJIFILM X-T30 III, la nuova mirrorless compatta FUJIFILM X-T30 III, la nuova mirrorless compatta
Google Maps avrà una modalit&agra...
HONOR sta lavorando a uno smartphone con...
Thermaltake MAGFloe 360 Ultra ARGB Sync:...
Xiaomi 15T ora in super offerta su Amazo...
Si stringe il cerchio attorno a TP-Link ...
Amazon cambia i prezzi ancora una volta:...
Imperdibili i Google Pixel 10 a questi p...
Dyson OnTrac in super offerta su Amazon:...
Amazon: la nuova ondata di licenziamenti...
Questo portatile è un mostro: MSI...
Apple Watch Series 11 GPS + Cellular cro...
JBL Clip 5 in forte sconto su Amazon: lo...
Il nuovo top di gamma compatto di OnePlu...
Cresce il divario tra dispositivi elettr...
La missione con equipaggio Shenzhou-21 h...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:53.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v