2013-10-04 31 views

回答

3

就可以这样做通过利用Swing中可用的Border API。仔细查看How to use borders了解更多详情。

作为一个非常粗略的例子...

enter image description here

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.EventQueue; 
import java.awt.Font; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.border.CompoundBorder; 
import javax.swing.border.EmptyBorder; 
import javax.swing.border.MatteBorder; 

public class PanelTitles { 

    public static void main(String[] args) { 
     new PanelTitles(); 
    } 

    public PanelTitles() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new TitlePane(), BorderLayout.NORTH); 
       frame.add(new JLabel("This is the content")); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TitlePane extends JPanel { 

     public TitlePane() { 
      setLayout(new BorderLayout());    
      setBorder(new CompoundBorder(new EmptyBorder(4, 4, 4, 4), new MatteBorder(0, 0, 1, 0, Color.BLACK))); 
      JLabel label = new JLabel("This is a title"); 
      label.setFont(label.getFont().deriveFont(Font.BOLD)); 
      add(label); 
     }   
    }   
} 
+2

也看看'这个答案](http://stackoverflow.com/a/19138661/418556)中看到'TitledBorder'。它不如在此解决方案中看到的多边界好,但可能更少的代码行。 –