2012-02-04 93 views
5

¿Es posible superponer un botón sobre una etiqueta en Swing?¿Superpone un JButton sobre JLabel en Java Swing?

Por ejemplo, si tengo un JLabel con imagen y sin texto, y quiero superponer mi botón sobre este JLabel. Etiqueta se define algo así como:

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

Si no, entonces alguna idea de cómo puedo darme cuenta de esto, gracias.

EDIT: En realidad leí acerca de la adición JPanel a un JLabel, cuando agrego un panel con disposición de los botones, que compila bien, pero no se ve nada, sólo el JLabel con la imagen

ACTUALIZACIÓN: Como se ha sugerido por @ paranoid-android, de alguna manera he resuelto mi problema. Sin embargo, todavía tengo que saber cómo puedo personalizar las posiciones de los componentes superpuestos sobre JLabel ya que no tengo mucho control (probablemente porque normalmente uso netbeans para diseños de dibujo, y esto requeriría una codificación difícil).

algo como esto funcionó:

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

¿Está intentando crear un JButton sin bordes? ¿O un JLabel clicable? – Raceimaztion

+0

@Raceimaztion, tengo JLabel con imagen establecida en un marco no decorado, de modo que en la pantalla solo se ve la imagen sin ningún borde ni nada. Ahora quiero agregar otras opciones superponiéndolas en la parte superior de esta imagen, puede que deba probar con la imagen en un Panel, pero quería saber si esto es realizable. ¿Qué he preguntado? – Johnydep

+0

Reporte lo que funciona y lo que no, por favor. :) – rtheunissen

Respuesta

9

Puede hacerlo utilizando un JLayeredPane, aunque si he entendido bien, la absoluta mejor manera de hacerlo sería para anular paintComponent:

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

continuación, puede añadir componentes a la panel como lo desee, sin la necesidad del JLabel.

2

Usted puede solaparse con el botón y la etiqueta, pero que tendría que hacer esto con un diseño fijo. Podrías tirar si está apagado con un gridBagLayout, pero lo dudo.

Aquí encontrará más información sobre lo que necesitará.

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

+0

En realidad lo probé pero GridBagLayout realmente no permite la superposición. – Johnydep

Cuestiones relacionadas