2010-02-06 3 views

Antwort

13

Anruf setBorder auf JButton wie folgt aus:

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

Vom JavaDoc, ist ein EmptyBorder eine „transparente Grenze, die Platz in Anspruch nimmt, aber führt keine Zeichnung“. In meinem Beispiel soll es 3 Pixel bzw. oben, links, unten und rechts nehmen.

komplette Code, dessen Zweck es ist, nur zu zeigen, wie EmptyBorder verwenden:

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' ist der richtige Weg, aber setze es auf deinen' JPanel'. Ansonsten müssten Sie für jede Schaltfläche einstellen. –

+0

yup ... In dem Beispiel, das ich hinzugefügt habe, habe ich einen anderen Rand auf zwei Buttons gelegt, nur um das Verhalten zu zeigen. Aber Peter hat Recht. – SyntaxT3rr0r

+4

Das explizite Festlegen eines leeren Rands auf einer Schaltfläche ändert auch die Größe und das Innenlayout der Schaltfläche (zumindest bei Vista mit System und Metalloptik). Ich möchte es definitiv auf ein containing Panel setzen. – Ash

1

Wahrscheinlich haben Sie (oder bald haben) mehr als eine Taste in dem Behälter, und wollen, dass sie horizontal auszurichten. So betrachten innerhalb der Tasten setzen in einer verschachtelten JPanel mit einem 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; 
} 

Dann diese Platte mit dem Rahmen oder Platte Mutter hinzufügen

0

Border geht, wie der Name an der Grenze sagt (mit BorderLayout.) . Sie können jedoch Dinge darin verschachteln, so dass Sie ein JPanel mit einem Rahmen einfügen können und dann Ihren Button darin einfügen.

Sie können auch mit dem GUI-Designer in Netbeans experimentieren. Es ist wirklich sehr nett und gibt eine Menge Hilfe zu Dingen, die Sie normalerweise tun möchten (wie einen Rand zur Grenze haben, usw.).

Verwandte Themen