注:本文內容轉自:Swing編程邊框(Border)的用法總結。內容根據筆者理解稍有整理。
函數說明:
public void setBorder(Border border)
設置此組件的邊框。Border 對象負責定義組件的 insets(直接對組件重寫所有 insets 設置),並且可選地呈現這些 insets 范圍內的邊框裝飾。要為 swing 組件創建有裝飾的和無裝飾的區域(例如邊距和填充),應該使用邊框(而不是 insets)。在單個組件中可使用復合邊框來嵌套多個邊框。 雖然從技術上講可以在繼承自 JComponent 的所有對象上設置邊框,但是很多標准 Swing 組件的外觀實現無法正常地使用用戶設置的邊框。通常,如果希望在標准的 Swing 組件而不是 JPanel 或 JLabel 上設置邊框時,建議將組件放入 JPanel 中,並在 JPanel 上設置邊框。
Border對象的定義主要通過BorderFactory進行,這也是本文討論的重點,根據API的解釋:BorderFactory提供標准Border對象的工廠類。在任何可能的地方,此工廠類都將提供對已共享Border實例的引用。下面討論具體的應用方法:
import java.awt.Color; import java.awt.Dimension; import java.awt.GridLayout; import javax.swing.*; import javax.swing.border.Border; import javax.swing.border.TitledBorder; public class setBorderDemo { public static void main(String[] args) { // TODO Auto-generated method stub JPanel panel = new JPanel(); panel.setLayout(new GridLayout(0, 2, 5, 10)); panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); JButton p1 = new JButton(); p1.setBorder(BorderFactory.createLineBorder(Color.red, 3)); p1.add(new JLabel("線邊框")); panel.add(p1); JPanel p2 = new JPanel(); p2.setBorder(BorderFactory.createEtchedBorder()); p2.add(new JLabel("蝕刻邊框")); panel.add(p2); JPanel p3 = new JPanel(); p3.setBorder(BorderFactory.createRaisedBevelBorder()); p3.add(new JLabel("斜面邊框(凸)")); panel.add(p3); JPanel p4 = new JPanel(); p4.setBorder(BorderFactory.createLoweredBevelBorder()); p4.add(new JLabel("斜面邊框(凹)")); panel.add(p4); JPanel p5 = new JPanel(); p5.setBorder(BorderFactory.createTitledBorder("標題")); p5.add(new JLabel("標題邊框")); panel.add(p5); JPanel p6 = new JPanel(); TitledBorder tb = BorderFactory.createTitledBorder("標題"); tb.setTitleJustification(TitledBorder.RIGHT); p6.setBorder(tb); p6.add(new JLabel("標簽邊框(右)")); panel.add(p6); JPanel p7 = new JPanel(); p7.setBorder(BorderFactory.createMatteBorder(1, 5, 1, 1, Color.yellow)); p7.add(new JLabel("花色邊框")); panel.add(p7); JPanel p8 = new JPanel(); Border b1 = BorderFactory.createLineBorder(Color.blue, 2); Border b2 = BorderFactory.createEtchedBorder(); p8.setBorder(BorderFactory.createCompoundBorder(b1, b2)); p8.add(new JLabel("組合邊框")); panel.add(p8); JFrame frame = new JFrame("Swing邊框演示"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(panel); frame.pack(); frame.setVisible(true); } }
運行效果如下圖所示:
運行效果圖
需注意的是,panel與frame之間其實是有一個寬度為5像素的emptyBorder,它只占空間而不顯示。