第二十章《Java Swing》第6節(jié):中間容器

2023-01-04 12:20:41 來源:51CTO博客

?所有可以添加組件的組件都可以被稱為“容器”,在Swing體系中,窗體可以被稱為頂級容器,在頂級容器中還可以創(chuàng)建中間容器并用它們來存放其他組件,程序員也可以對中間容器單獨設置布局管理器。Swing體系中,中間容器包括JPanel、JScollPane、JtabbedPane、JToolBar等,本小節(jié)將詳細講解中間容器的使用。


【資料圖】

20.6.1面板JPanel

在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é)果如圖?

20.6.2滾動面板JScrollPane

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)垂直滾動條。?

20.6.3選項板JTabbedPane

選項板是由若干個選項卡組成的一個容器,使用選項板可以把各個組件擺放到不同的選項卡中,這樣就能把一個窗體從形式上分成了好幾部分,從而能夠把一個窗體清楚的劃分成不同的功能區(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é)果?

本文字版教程還配有更詳細的視頻講解,小伙伴們可以??點擊這里??觀看。

標簽: 總是顯示垂直滾動條 第二十章

上一篇:【環(huán)球播資訊】第二十章《Java Swing》第7節(jié):對話框
下一篇:熱點在線丨【服務器數(shù)據(jù)恢復】機房斷電導致服務器raid模塊損壞,raid5磁盤陣列崩潰,服務器不可用的數(shù)據(jù)恢復案例