4

第二十章《Java Swing》第6节:中间容器

 1 year ago
source link: https://blog.51cto.com/mugexuetang/5987066
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

第二十章《Java Swing》第6节:中间容器

精选 原创

​所有可以添加组件的组件都可以被称为“容器”,在Swing体系中,窗体可以被称为顶级容器,在顶级容器中还可以创建中间容器并用它们来存放其他组件,程序员也可以对中间容器单独设置布局管理器。Swing体系中,中间容器包括JPanel、JScollPane、JtabbedPane、JToolBar等,本小节将详细讲解中间容器的使用。

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】的运行结果如图20-20所示。​

第二十章《Java Swing》第6节:中间容器_JTabbedPane

图20-20【例20_19】运行结果如图​

20.6.2滚动面板JScrollPane

JScrollPane被称为“滚动面板”,它的主要作用是盛放一些比较大的组件并为之添加滚动条,例如用滚动面板盛放文本区、表格、树形组件等。​

JScrollPane作为一个中间容器最主要的就是设置其滚动条显示策略,所谓滚动条显示策略就是规定滚动条在什么情况下被显示。滚动条策略由一个整数来表示,而这些整数都以ScrollPaneConstants类的静态属性来定义。下面的表20-11展示了代表各种滚动条策略的静态属性。​

表20-11 JScrollPane滚动条策略​

静态属性​

滚动条策略​

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();//获得窗体的主体区域
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】的运行结果如图20-21所示。​

第二十章《Java Swing》第6节:中间容器_JScrollPane_02

图20-21【例20_20】运行结果​

从图20-21中可以看出:如果对滚动面板设置了不显示垂直滚动条,那么即使垂直方向不能显示出所有文本,滚动面板也不会出现垂直滚动条。​

20.6.3选项板JTabbedPane

选项板是由若干个选项卡组成的一个容器,使用选项板可以把各个组件摆放到不同的选项卡中,这样就能把一个窗体从形式上分成了好几部分,从而能够把一个窗体清楚的划分成不同的功能区域,并且还不增加窗体的面积。在Swing体系中使用JTabbedPane类来表示选项板。​

一个选项板是由多个选项卡组成的,程序员可以根据实际需要来为选项板灵活的添加选项卡。添加选项卡的方法是addTab(),addTab()方法不仅仅能够增加一个选项卡的组件,还可以指定这个选项卡的标题。需要强调:一个选项卡上只能添加一个组件,如果希望在选项卡上添加多个组件,可以先在选项卡上添加一个JPanel面板,然后在该面板上添加多个其他组件。​

为了让选项板正确的显示到窗体上,通常情况下都不会把窗体设置为空布局,而是采用窗体的默认布局方式,之后根据需要对每个选项卡上的JPanel面板单独进行布局设置。下面的【例20_21】展示了如何创建一个选项板。​

【例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】的运行结果如图20-22所示。​

第二十章《Java Swing》第6节:中间容器_Swing_03

图20-22【例20_21】运行结果​

本文字版教程还配有更详细的视频讲解,小伙伴们可以 ​点击这里观看。

  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK