2012-02-20 19 views
23

Tengo el problema con JButton en Java, básicamente quiero deshabilitar el borde del botón (el botón se agrega a JDesktopPane).Desactivar JButton focus border

Aquí está mi código:

JButton j = new JButton("BUTTON"); 
j.setIcon(icon1); //icon1 : icon// 
j.setFocusable(true); 
j.setContentAreaFilled(false); 
j.setBounds(90, 20, 130, 30); 
dtp.add(j); //dtp : JDesktopPane// 

Podría dejar que la frontera desapareció como esta imagen:

enter image description here

Pero cuando se hace clic en el ratón (no movido alrededor) en el botón, hay un borde "punto" alrededor del botón, como este:

enter image description here

Entonces, ¿cómo podría configurar el botón para que cuando no mueva el mouse por el área del botón, quede hasta que se configure como primera imagen, pero cuando muevo el mouse, aparezca el botón cuadrado (con luz azul fondo)?

+2

* "Deje que el borde desaparezca como esta imagen" * Parece muy poco intuitivo. ¿Qué * else * estás haciendo para confundir y confundir al pobre usuario final? –

+0

Entonces, ¿qué palabras cree mejor en este caso? Por cierto, el inglés no es mi primer idioma. –

+0

Me refería al botón sin bordes como "no intuitivo", no a lo que escribiste. Lo que escribiste es bastante claro. Perdón por cualquier confusión. –

Respuesta

0

ver si esto puede ayudar a salir Remove border

o tal vez esto

Border emptyBorder = BorderFactory.createEmptyBorder(); 
yourButton.setBorder(emptyBorder); 
+0

Cuando configuro "Border emptyBorder = BorderFactory.createEmptyBorder(); yourButton.setBorder (emptyBorder)"; me dio el botón normal sin ningún efecto. –

83

Eso no es frontera. Es foco. Se puede quitar usando:

jButton1.setFocusPainted(false); 
+0

Exactamente lo que estaba buscando. ¡Gracias! – brimborium

+0

:) ............... – zari

1

no creo que hacer esto con el habitual JButton es una buena idea. Si nada, no se mostrará similar en diferentes plataformas (Mac & Linux) en caso de que planee mostrar este botón en diferentes plataformas. Para todos los propósitos prácticos button.setFocusPainted(false); debe encargarse de su requisito actual.

Considere usar un JLabel extendido con un comportamiento tipo botón (con oyentes de acción) para evitar diferencias de comportamiento.

4

Esto puede ser viejo hilo, pero resuelto la mía con button.setFocusable(false)

creo que sirve para aquellos cuyos todavía en busca de alguna respuesta. aplausos.

+0

Es importante tener en cuenta que este es el comportamiento predeterminado correcto solo para ToolBars. En Visual Studio con Windows Forms, ToolStrip tiene configurado TabStop como falso de forma predeterminada. Use mi solución de interfaz de usuario anterior para eliminar los bordes de puntos en los botones de la barra de herramientas y los botones de palanca que nunca los tienen en Windows con o sin foco. – Goombert

2

Después de excavar, he encontrado una solución mejor. Este es también un error común de UI en aplicaciones GTK en Windows, uno de ellos es GIMP. Me molesta mucho, así que quería encontrar un arreglo global mejor que fijarlo manualmente en cada control.

La solución establece el color para el enfoque en todos los controles comunes que no se supone que ocurran en transparente. Fui y probé ampliamente con Windows Forms en Visual Studio. Los botones de la barra de herramientas y ToggleButtons nunca deben tener el borde punteado incluso cuando están enfocados. Se supone que las barras de herramientas son setFocusable (falso); por defecto, ya que están en Windows. Todos los otros controles deben tener el borde punteado como en Swing, pero solo cuando se realiza un ciclo de enfoque.

 // Removes the dotted border around controls which is not consistent with Windows 
     UIManager.put("Button.focus", new ColorUIResource(new Color(0, 0, 0, 0))); 
     UIManager.put("ToggleButton.focus", new ColorUIResource(new Color(0, 0, 0, 0))); 

     // ways to remove it from other controls... 
     UIManager.put("CheckBox.focus", new ColorUIResource(new Color(0, 0, 0, 0))); 
     UIManager.put("TabbedPane.focus", new ColorUIResource(new Color(0, 0, 0, 0))); 
     UIManager.put("RadioButton.focus", new ColorUIResource(new Color(0, 0, 0, 0))); 
     UIManager.put("Slider.focus", new ColorUIResource(new Color(0, 0, 0, 0))); 

     // figure out combobox 
     UIManager.put("ComboBox.focus", new ColorUIResource(new Color(0, 0, 0, 0)));