setBorder(Border)
JButton kế thừa JComponent, có phương thức setBorder(Border). Các Border phổ biến trong javax.swing.border.BorderFactory:
createLineBorder(Color)– viền đơn sắccreateBevelBorder(int type)– bevel raised/loweredcreateBevelBorder(int, Color highlight, Color shadow)– bevel tùy màucreateBevelBorder(int, Color hiOuter, Color hiInner, Color loOuter, Color loInner)– bevel 4 màucreateEmptyBorder(top, left, bottom, right)– khoảng trống (padding)createEtchedBorder(int type)– etched (sunken/raised)createTitledBorder(String title)– viền có tiêu đề
Ví dụ: 7 button với border khác nhau
import javax.swing.*;
import javax.swing.border.BorderFactory;
import java.awt.*;
public class JButtonBordersDemo extends JFrame {
public JButtonBordersDemo() {
setTitle("JButton Borders Demo");
JPanel panel = new JPanel(new GridLayout(7, 1));
JButton[] buttons = new JButton[7];
for (int i = 0; i < 7; i++) {
buttons[i] = new JButton("Button " + (i+1));
panel.add(buttons[i]);
}
buttons[0].setBorder(BorderFactory.createLineBorder(Color.BLUE));
buttons[1].setBorder(BorderFactory.createBevelBorder(0)); // RAISED
buttons[2].setBorder(BorderFactory.createBevelBorder(1, Color.RED, Color.BLUE)); // LOWERED
buttons[3].setBorder(BorderFactory.createBevelBorder(1, Color.GREEN, Color.ORANGE, Color.RED, Color.BLUE));
buttons[4].setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); // padding
buttons[5].setBorder(BorderFactory.createEtchedBorder(0)); // ETCHED
buttons[6].setBorder(BorderFactory.createTitledBorder("Titled Border"));
add(panel, BorderLayout.CENTER);
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(JButtonBordersDemo::new);
}
}
Kết quả

Mẹo: Kết hợp nhiều border: BorderFactory.createCompoundBorder(outer, inner).