2012-02-04 8 views
5

È possibile sovrapporre un pulsante su un'etichetta in Swing?Sovrapponi un JButton su JLabel in Java Swing?

Ad esempio, se si dispone di una JLabel con immagine e senza testo, e voglio sovrapporre il mio pulsante a questa JLabel. L'etichetta è definita come:

myLabel = new javax.swing.JLabel(new ImageIcon(myPicture)); 

In caso contrario, quindi qualsiasi idea come posso realizzare questo, grazie.

EDIT: In realtà ho letto di aggiungere JPanel ad un JLabel, quando aggiungo un pannello con layout dei pulsanti, si compila bene, ma non c'è nulla di visibile, solo il JLabel con immagine

UPDATE: Come suggerito da @ paranoico-android, in qualche modo ho risolto il mio problema. Tuttavia devo ancora sapere come posso personalizzare le posizioni dei componenti sovrapposti su JLabel in quanto non ho molto controllo (probabilmente perché normalmente uso netbeans per disegnare i layout, e questo richiederebbe un hard coding).

qualcosa come questo ha funzionato:

ImagePanel(Image image, int id) { 
    this.image = image; 
    this.tile = false; 

    JButton backButton = new JButton(); 
    JButton nextButton = new JButton(); 
    backButton.setText(" BACK "); 
    nextButton.setText(" NEXT "); 


    add(backButton); 
    add(nextButton); 

}; 

@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.drawImage(image, 0, 0, getWidth(), getHeight(), this); 
} 
+0

Stai cercando di creare un JButton senza bordi? O una JLabel cliccabile? – Raceimaztion

+0

@Raceimaztion, ho JLabel con l'immagine impostata su una cornice non decorata, in modo che sullo schermo si veda solo l'immagine senza alcun bordo o altro. Ora voglio aggiungere altre opzioni sovrapponendole sopra a questa immagine, potrebbe essere necessario provare con l'immagine in un pannello, ma volevo sapere se questo è qualcosa di realizzabile che cosa ho chiesto? – Johnydep

+0

Riporta ciò che funziona e cosa no, per favore. :) – rtheunissen

risposta

9

È possibile farlo utilizzando un JLayeredPane, anche se ho capito bene, il modo migliore in assoluto per farlo sarebbe quello di ignorare paintComponent:

// as part of your JPanel 
@Override 
public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    g.drawImage(background, 0, 0, this); 
} 

Quindi è possibile aggiungere componenti alla pannello come ti piace, senza la necessità di JLabel.

2

è possibile sovrapporre il pulsante e l'etichetta, ma si avrebbe a che fare questo con un layout fisso. Potresti essere in grado di tirare fuori con un gridBayLayout, ma ne dubito.

Ecco di più su ciò di cui avrete bisogno.

http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

+0

In realtà ho provato, ma GridBagLayout non consente realmente la sovrapposizione. – Johnydep