2010-02-06 6 views

Respuesta

13

llamada setBorder en su JButton como esto:

setBorder(new EmptyBorder(3, 3, 3, 3)) 

Desde el JavaDoc, un EmptyBorder es una "frontera transparente que ocupa espacio pero no hace ningún dibujo". En mi ejemplo, tomará 3 píxeles, respectivamente, superior, izquierda, inferior y derecha.

Código completo cuyo propósito es sólo para mostrar cómo utilizar EmptyBorder:

import java.awt.BorderLayout; 
import java.awt.Container; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.border.EmptyBorder; 

public class ALineBorder { 

    public static void main(String args[]) { 
     JFrame frame = new JFrame("Line Borders"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JButton button1 = new JButton("Button1"); 
     button1.setBorder(new EmptyBorder(8, 8, 8, 8)); 
     JButton button2 = new JButton("Button2"); 
     JButton button3 = new JButton("Button3"); 
     button3.setBorder(new EmptyBorder(16, 16, 16, 16)); 
     Container contentPane = frame.getContentPane(); 
     contentPane.add(button1, BorderLayout.WEST); 
     contentPane.add(button2, BorderLayout.CENTER); 
     contentPane.add(button3, BorderLayout.EAST); 
     frame.pack(); 
     frame.setSize(300, frame.getHeight()); 
     frame.setVisible(true); 
    } 

} 
+1

+1: 'setBorder' es la forma correcta, pero configúrelo en su' JPanel'. De lo contrario, debería establecer si para cada botón. –

+0

yup ... En el ejemplo que agregué coloqué un borde diferente en dos botones solo para mostrar el comportamiento. Pero Peter tiene razón. – SyntaxT3rr0r

+4

Establecer explícitamente un borde vacío en un botón también cambia el tamaño y el diseño interior del botón (al menos en Vista con aspecto y sensaciones del sistema y del metal). Definitivamente quiero configurarlo en un panel contenedor. – Ash

1

Lo más probable es que tenga (o pronto lo tienen) más de un botón en el contenedor, y desea alinear horizontalmente. Así que considerar la posibilidad de los botones dentro de un anidado JPanel con un GridBagLayout:

class ButtonPanel extends JPanel { 
    ButtonPanel() { 
     setLayout(new GridBagLayout()); 
    } 

    @Override 
    public Component add(Component button) { 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridy = nextGridY++; 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.insets = new Insets(3, 3, 3, 3); 
     super.add(button, gbc); 
     return button; 
    } 

    int nextGridY; 
} 

A continuación, agregue este panel para el marco principal o panel

0

BorderLayout va como su nombre lo dice a la frontera (con un BorderLayout). . Sin embargo, puede anidar cosas dentro, por lo que podría insertar un JPanel con un borde y luego colocar su botón en eso.

También es posible que desee experimentar con el diseñador de GUI en Netbeans. Es realmente muy agradable, y le da mucha ayuda a las cosas que generalmente quiere hacer (como tener un margen hasta el borde, etc.).

Cuestiones relacionadas