swing的JSplitPane容器
Swing中的特殊容器:JSplitPane、JTabbedPane Swing提供了一些具有特殊功能的容器,这些特殊容器可以用于创建一些更复杂的用户界面
JSplitPane JSplitPane用于创建一个分割面板,它可以将一个组件(通常是容器)分割成两个部分(上下两部分或者是左右两部分),并提供一个分割条,用户可以拖动该分割条来调整两个部分大小
JSplitPane使用步骤:
第一步:创建JSplitPane对象,第一步完成后,就有了一个初步的分割面板
JSplitPane(int newOrientation,Component newLeftComponent,Component newRightComponent)分析一下上面那行的构造方法的各个参数:
1、newOrientation:指定JSplitPane容器的分割方向(纵向分割或者横向分割) 如果值为JSplitPane.VERTICAL_SPLIT,为纵向分割 如果值为JSplitPane.HORIZONTAL_SPLIT,为纵向分割
2、newLeftComponent:左侧或者上侧的组件(即指定分割后的组件,如果是左右分割就指定的是左侧组件,如果是上下分割就指定的是上侧组件)
3、newRightComponent:右侧或者下侧的组件(即指定分割后的组件,如果是左右分割就指定的是右侧组件,如果是上下分割就指定的是下侧组件)
第二步:设置是否开启连续布局的支持(可选,即不一定非要写这个步骤)
setContinuousLayout(boolean newContinuousLayout)默认是关闭的,如果设置为true,则打开连续布局的支持,但由于连续布局支持需要不断的重绘组件,所有效率会低一些
什么是连续布局:当用户拖动分割条时,两个部分的区域里面的画面组件是否会实时重绘,即用户每拖动一次分割条,组件就重绘一次,如果是,就是连续布局
为了提高效率,我们一般是不支持连续布局的,连续布局的优点就是会提高用户的体验度
第三步:设置是否支持"一触即展"的支持(可选,即不一定非要写这个步骤)
xxxxxxxxxxsetOneTouchExpandable(boolean newValue)默认是关闭的,如果设置为true,则打开“一触即展”的支持
什么是一触即展:以上下部分的结构为例,上下部分的中间有一条分割条,当用户把这条线拖到比如最底部时,下部分就会消失,只剩下上部分可见 这个一触即展除了用户分割条可以达到效果,在线的最左边有两个按钮,点击即可发生一键展开上部分,或一键展开下部分
第四步:其他设置
| 方法 | 作用 |
|---|---|
| setDividerLocation(double proportionalLocation) | 设置分割条的位置为JSplitPane的某个百分比 |
| setDividerLocation(int location) | 通过像素值设置分割条的位置 |
| setDividerSize(int newSize) | 通过像素值设置分割条的大小 |
| setLeftComponent(Component comp) | 设置指定位置的组件 |
swing的JSplitPane容器_练习
xxxxxxxxxxpackage ch30;
import javax.swing.*;import javax.swing.event.ListSelectionEvent;import javax.swing.event.ListSelectionListener;import java.awt.*;
public class a_14_0swing_特殊容器_JSplitPane {
//声明好三本书 Book[] books = { new Book("java入门到精通", new ImageIcon("src\\img\\book1.png"), "国内关于 Java 编程最全面的图书 \n 看得懂 , 学得会"), new Book("轻量级的JAVA核心技术", new ImageIcon("src\\img\\book2.png"), "SSM整合开发的经典图书,值的拥有"), new Book("轻松学java编程", new ImageIcon("src\\img\\book3.png"), "全面介绍Android平台应用程序\n 开发的各方面知识") };
JFrame jf = new JFrame("测试JSplitPane");
//窗口右边区域的列表,JList就是这个列表,里面存放了很多条目包括书名、书描述、书图标。 //由于我们在最下面的Book类里面重写了书名的toString方法,所以这个条目列表只显示的是书名 JList<Book> bookJList = new JList<>(books);//这个books就是上面声明好的数组,里面存放了三本书
//放图片的区域 JLabel bookCover = new JLabel();
//右下角的书的描述区域 JTextArea bookDesc = new JTextArea();
//组装视图 public void init(){ //设定组件大小,下面那行是右侧区域的视图宽高 bookJList.setPreferredSize(new Dimension(150,400)); //下面是右侧视图,左侧视图有两部分组成,这两部分的总高度等于上面那行的高度即可让左右区域同高 bookCover.setPreferredSize(new Dimension(220,270)); bookDesc.setPreferredSize(new Dimension(220,130));
//为jList设置条目选中监听器 bookJList.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { //获取当前选中的是哪个条目,即点击了哪个书名 Book book = bookJList.getSelectedValue();
//把书的图片用bookCover展示,即把书的图片放到左上边区域 bookCover.setIcon(book.getIcon());
//把书的描述用bookDesc展示,即把书的描述放到左下边区域 bookDesc.setText(book.getDesc()); } });
//组装左边区域的上下两个部分(即图片和描述)。JSplitPane的参数:排列方向(比如这里的两个部分是垂直分割)、上部分组件、下部分组件 JSplitPane left = new JSplitPane(JSplitPane.VERTICAL_SPLIT,bookCover,new JScrollPane(bookDesc)); //上面那行把bookDesc放到new JScrollPane()里面,bookDesc文本域就会有滚动条啦
//一触即展 left.setOneTouchExpandable(true);
//组装整体,即左边区域和右边区域。JSplitPane参数:排列方向(比如这两个区域是水平分割)、左边区域(即125行组装好的左边区域)、右边区域 JSplitPane hole = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,left,bookJList);
//支持连续布局 hole.setContinuousLayout(true); hole.setDividerSize(10);
jf.add(hole);//不写参数,就是默认将组装好的整体放到jf窗口的中间区域
//设置窗口的最佳大小,设置窗口可见,设置点击叉号就退出程序 jf.pack(); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) { new a_14_0swing_特殊容器_JSplitPane().init(); }
}
//对三本树的描述class Book {
//书名 private String name;
//图片 private Icon icon;
//书的描述 private String desc;
public Book(String name, Icon icon, String desc) { this.name = name; this.icon = icon; this.desc = desc; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Icon getIcon() { return icon; }
public void setIcon(Icon icon) { this.icon = icon; }
public String getDesc() { return desc; }
public void setDesc(String desc) { this.desc = desc; }
//书的toString方法,作用是让窗口右边区域的列表显示的是书的名称 public String toString() { return name; }
}