
?所有可以添加組件的組件都可以被稱為“容器”,在Swing體系中,窗體可以被稱為頂級容器,在頂級容器中還可以創(chuàng)建中間容器并用它們來存放其他組件,程序員也可以對中間容器單獨設置布局管理器。Swing體系中,中間容器包括JPanel、JScollPane、JtabbedPane、JToolBar等,本小節(jié)將詳細講解中間容器的使用。
【資料圖】
在Swing體系中用JPanel類來表示面板,面板就是一個最常見的中間容器。中間容器用來存放其他組件,其他組件如果放置在面板中時,通過setLocation()方法設置組件位置時,其位置是相對于面板的而不是相當于整個窗體而言的。下面的【例20_19】展示了使用JPanel作為中間容器的效果。?
【例20_19 JPanel的使用】
Exam20_19.java?
import javax.swing.*;import java.awt.*;class Exam20_19Frame extends JFrame{ JPanel jpn1; JPanel jpn2; JButton btn1,btn2; public Exam20_19Frame(){ init(); } private void init( ){ Container container = this.getContentPane(); container.setLayout(null); btn1 = new JButton("按鈕1"); btn1.setFont(new Font("微軟雅黑", Font.PLAIN, 20)); btn1.setSize(100,40); btn1.setLocation(0,0); jpn1 = new JPanel(null); jpn1.setSize(150,80); jpn1.setLocation(50,50); jpn1.setBorder(BorderFactory.createLineBorder(Color.BLACK,1)); jpn1.add(btn1); btn2 = new JButton("按鈕2"); btn2.setFont(new Font("微軟雅黑", Font.PLAIN, 20)); btn2.setSize(100,40); btn2.setLocation(0,0); jpn2 = new JPanel(null); jpn2.setSize(150,80); jpn2.setLocation(250,50); jpn2.setBorder(BorderFactory.createLineBorder(Color.BLACK,1)); jpn2.setBackground(Color.YELLOW); jpn2.add(btn2); container.add(jpn1); container.add(jpn2); }}public class Exam20_19 { public static void main(String[] args) { Exam20_19Frame frame = new Exam20_19Frame(); frame.setSize(500, 250); frame.setLocationRelativeTo(null); frame.setTitle("Exam20_19Frame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }}
【例20_19】的運行結(jié)果如圖20-20所示。?
圖20-20【例20_19】運行結(jié)果如圖?
JScrollPane被稱為“滾動面板”,它的主要作用是盛放一些比較大的組件并為之添加滾動條,例如用滾動面板盛放文本區(qū)、表格、樹形組件等。?
JScrollPane作為一個中間容器最主要的就是設置其滾動條顯示策略,所謂滾動條顯示策略就是規(guī)定滾動條在什么情況下被顯示。滾動條策略由一個整數(shù)來表示,而這些整數(shù)都以ScrollPaneConstants類的靜態(tài)屬性來定義。下面的表20-11展示了代表各種滾動條策略的靜態(tài)屬性。?
表20-11 JScrollPane滾動條策略?
靜態(tài)屬性? | 滾動條策略? |
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED ? | 需要時顯示垂直滾動條(默認)? |
ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER? | 從不顯示垂直滾動條? |
ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS? | 總是顯示垂直滾動條? |
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED ? | 需要時顯示水平滾動條(默認)? |
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER? | 從不顯示水平滾動條? |
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS? | 總是顯示水平滾動條? |
程序員可以通過JScrollPane類的setVerticalScrollBarPolicy()方法來設置滾動面板的垂直滾動條策略,而通過setHorizontalScrollBarPolicy()方法來設置垂直滾動條的策略。下面的【例20_20】展示了JScrollPane設置垂直滾動條策略的幾種效果,實際上設置水平滾動條也有同樣的效果。?
【例20_20 設置垂直滾動條顯示策略】
Exam20_20.java?
import javax.swing.*;import java.awt.*;class Exam20_20Frame extends JFrame{ JTextArea txa1; JTextArea txa2; JTextArea txa3; JScrollPane jsp1; JScrollPane jsp2; JScrollPane jsp3; public Exam20_20Frame(){ init(); } private void init( ){ Container container = this.getContentPane();//獲得窗體的主體區(qū)域 container.setLayout(null); txa1 = new JTextArea(); txa1.setFont(new Font("微軟雅黑", Font.PLAIN, 20)); txa1.setLineWrap(true); jsp1 = new JScrollPane(txa1); jsp1.setSize(150, 150); jsp1.setLocation(50, 20); //設置不顯示垂直滾動條 jsp1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER); txa2 = new JTextArea(); txa2.setFont(new Font("微軟雅黑", Font.PLAIN, 20)); txa2.setLineWrap(true); jsp2 = new JScrollPane(txa2); jsp2.setSize(150, 150); jsp2.setLocation(250, 20); //設置總是顯示垂直滾動條 jsp2.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); txa3 = new JTextArea(); txa3.setFont(new Font("微軟雅黑", Font.PLAIN, 20)); txa3.setLineWrap(true); jsp3 = new JScrollPane(txa3); jsp3.setSize(150, 150); jsp3.setLocation(450, 20); //設置需要時顯示垂直滾動條 jsp3.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); container.add(jsp1); container.add(jsp2); container.add(jsp3); }}public class Exam20_20 { public static void main(String[] args) { Exam20_20Frame frame = new Exam20_20Frame(); frame.setSize(680, 250); frame.setLocationRelativeTo(null); frame.setTitle("Exam20_20Frame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }}
【例20_20】的運行結(jié)果如圖20-21所示。?
圖20-21【例20_20】運行結(jié)果?
從圖20-21中可以看出:如果對滾動面板設置了不顯示垂直滾動條,那么即使垂直方向不能顯示出所有文本,滾動面板也不會出現(xiàn)垂直滾動條。?
選項板是由若干個選項卡組成的一個容器,使用選項板可以把各個組件擺放到不同的選項卡中,這樣就能把一個窗體從形式上分成了好幾部分,從而能夠把一個窗體清楚的劃分成不同的功能區(qū)域,并且還不增加窗體的面積。在Swing體系中使用JTabbedPane類來表示選項板。?
一個選項板是由多個選項卡組成的,程序員可以根據(jù)實際需要來為選項板靈活的添加選項卡。添加選項卡的方法是addTab(),addTab()方法不僅僅能夠增加一個選項卡的組件,還可以指定這個選項卡的標題。需要強調(diào):一個選項卡上只能添加一個組件,如果希望在選項卡上添加多個組件,可以先在選項卡上添加一個JPanel面板,然后在該面板上添加多個其他組件。?
為了讓選項板正確的顯示到窗體上,通常情況下都不會把窗體設置為空布局,而是采用窗體的默認布局方式,之后根據(jù)需要對每個選項卡上的JPanel面板單獨進行布局設置。下面的【例20_21】展示了如何創(chuàng)建一個選項板。?
【例20_21 JtabbedPane的使用】
Exam20_21.java?
import javax.swing.*;import java.awt.*;class Exam20_21Frame extends JFrame{ JTabbedPane tbpMain; JButton btn1,btn2; JPanel jpn1; JPanel jpn2; public Exam20_21Frame(){ init(); } private void init( ){ Container container = this.getContentPane(); this.setResizable(false); tbpMain=new JTabbedPane(); jpn1 = new JPanel(null); btn1=new JButton("按鈕1"); btn1.setSize(100,30); btn1.setLocation(50, 50); btn1.setFont(new Font("微軟雅黑", Font.PLAIN, 20)); jpn1.add(btn1); jpn2 = new JPanel(null); btn2=new JButton("按鈕2"); btn2.setSize(100,30); btn2.setLocation(50, 50); btn2.setFont(new Font("微軟雅黑", Font.PLAIN, 20)); jpn2.add(btn2); tbpMain.addTab("選項卡一", jpn1); tbpMain.addTab("選項卡二", jpn2); container.add(tbpMain); }}public class Exam20_21 { public static void main(String[] args) { Exam20_21Frame frame = new Exam20_21Frame(); frame.setSize(300, 350); frame.setLocationRelativeTo(null); frame.setTitle("Exam20_20Frame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }}
【例20_21】的運行結(jié)果如圖20-22所示。?
圖20-22【例20_21】運行結(jié)果?
本文字版教程還配有更詳細的視頻講解,小伙伴們可以??點擊這里??觀看。