一、分割面板(JSplitPane)
1.概述
JSplitPane用于分隔两个(只能两个)组件,两个组件通过水平|垂直分隔条分别左右或上下显示,并且可以拖动分隔条调整两个组件显示区域的大小。
2.JSplitPane 常用构造方法
JSplitPane()
JSplitPane(int orientation)
JSplitPane(int orientation, boolean continuousLayout)
JSplitPane(int orientation, boolean continuousLayout, Component leftComponent, Component rightComponent)
JSplitPane(int orientation, Component leftComponent, Component rightComponent)
参数说明:
orientation: 分隔的方向,取值 JSplitPane.HORIZONTAL_SPLIT(水平左右分隔)或 JSplitPane.VERTICAL_SPLIT(垂直上下分隔),默认水平左右分隔。
continuousLayout: 拖动分隔条时,是否连续重绘组件,如果为flase,则拖动分隔条停止后才重绘组件。
leftComponent: 左边/上面 显示的组件
rightComponent: 右边/下面 显示的组件
3.JSplitPane 常用方法
设置分隔的方向,水平(左右) 或 垂直(上下) 分隔
void setOrientation(int orientation)
设置 左边/上面 显示的组件(下面两个方法完全一致)
void setLeftComponent(Component comp)
void setTopComponent(Component comp)
设置 左边/下面 显示的组件(下面两个方法完全一致)
void setRightComponent(Component comp)
void setBottomComponent(Component comp)
设置 拖动分隔条 时是否 连续重绘 组件
void setContinuousLayout(boolean continuousLayout)
分隔条上是否显示快速 折叠/展开 两边组件的小按钮
void setOneTouchExpandable(boolean newValue)
设置分隔条的大小(宽度)
void setDividerSize(int newSize)
设置分隔条的位置,相对于 左边/顶部 的像素长度
void setDividerLocation(int location)
设置分隔条的位置,相对于 宽度/高度 的比例 [0.0 ~ 1.0](该方法必须要先确保 JSplitPane 已经有宽高值,否则无效)
void setDividerLocation(double proportionalLocation)
----------------------------------------------------------------------------------------------------------
JProgressBar
1. 概述
官方JavaDocsApi: javax.swing.JProgressBar
JProgressBar,进度条。
以可视化形式显示某些任务进度的组件。
进度条中心可显示进度百分比的文本表示形式。
当一个任务的进度长度未知时,可将进度条设置为不确定模式。不确定模式的进度条持续地显示动画来表示正进行的操作。当可以确定任务长度和进度量时,则可设置进度条的最大最小值,以及更新进度条的进度值,将其切换回确定模式。
JProgressBar 常用构造方法:
/**
* 构造方法中的参数含义:
* orient: 进度条的方向,SwingConstants.VERTICAL 或 SwingConstants.HORIZONTAL,默认为水平方向
* min: 最小进度值
* max: 最大进度值
*/
JProgressBar()
JProgressBar(int orient)
JProgressBar(int min, int max)
JProgressBar(int orient, int min, int max)
JProgressBar 常用方法:
// 设置 最小进度值、最大进度值、当前进度值
void setMinimum(int min)
void setMaximum(int max)
void setValue(int n)
// 获取当前进度值
int getValue()
// 获取当前进度的百分比
double getPercentComplete()
// 是否绘制百分比文本(进度条中间显示的百分数)
void setStringPainted(boolean b)
// 设置进度条进度是否为不确定模式
void setIndeterminate(boolean newValue)
// 设置进度条的方向,SwingConstants.VERTICAL 或 SwingConstants.HORIZONTAL
void setOrientation(int newOrientation)
// 添加进度条的进度改变监听器
void addChangeListener(ChangeListener l)
1.分割面板的使用
import java.awt.Color; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JSplitPane; /** * 分割面板: * 1. JSplitPane * 2.将一个完成的窗体按照特定的规则进行分割成几个等分。 * @author Zkingzz * */ public class JSplitPaneDemo extends JFrame{ /** * 1.创建分割面板 */ private JSplitPane jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT); //2个填充的组件JPanel private JPanel jpa = new JPanel(); private JPanel jpb = new JPanel(); public JSplitPaneDemo() { this.setTitle(""); this.setSize(500,400); this.setDefaultCloseOperation(3); this.setLocationRelativeTo(null); //调节分割线的间距 jsp.setDividerLocation(150); //调节分割线的粗细 jsp.setDividerSize(10); //禁用拖动 jsp.setEnabled(false); jpa.setBackground(Color.red); jpb.setBackground(Color.yellow); //分割面板分成2个部分 上部分 jpa 下部分 jpb jsp.setTopComponent(jpa); jsp.setBottomComponent(jpb); //JSplitPane是中间组件,直接可以加入窗体 this.getContentPane().add(jsp); this.setVisible(true); } public static void main(String[] args) { new JSplitPaneDemo(); } }
2.分割面板 多个面板
/** * 分割面板: * 1. JSplitPane * 2.将一个完成的窗体按照特定的规则进行分割成几个等分。 * @author Zkingzz * */ public class JSplitPaneDemo2 extends JFrame{ /** * 1.创建分割面板 */ private JSplitPane jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT); //2个填充的组件JPanel private JPanel jpa = new JPanel(); // private JPanel jpb = new JPanel(); private JSplitPane jsp2 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); private JPanel jpb = new JPanel(); private JPanel jpc = new JPanel(); public JSplitPaneDemo2() { this.setTitle(""); this.setSize(500,400); this.setDefaultCloseOperation(3); this.setLocationRelativeTo(null); jsp2.setDividerLocation(200); jsp2.setDividerSize(2); jsp2.setLeftComponent(jpb); jsp2.setRightComponent(jpc); //调节分割线的间距 jsp.setDividerLocation(150); //调节分割线的粗细 jsp.setDividerSize(10); //禁用拖动 jsp.setEnabled(false); jpa.setBackground(Color.red); jpb.setBackground(Color.yellow); jpc.setBackground(Color.green); //分割面板分成2个部分 上部分 jpa 下部分 jpb jsp.setTopComponent(jpa); jsp.setBottomComponent(jsp2); //JSplitPane是中间组件,直接可以加入窗体 this.getContentPane().add(jsp); this.setVisible(true); } public static void main(String[] args) { new JSplitPaneDemo2(); } }
3.分割面板 与JPanel组件的刷新重新加载!!
import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSplitPane; public class Demo2 extends JFrame { private JSplitPane jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT); private JSplitPane jsp2 = new JSplitPane(); private JPanel jpa = new JPanel(); private JPanel jpb = new JPanel(); private JPanel jpc = new JPanel(); // 上容器组件 private JLabel jla = new JLabel("康康足浴后台管理系统"); // 下左容器 private JButton jba = new JButton("康康服务"); private JButton jbb = new JButton("客户管理"); private JButton jbc = new JButton("套餐管理"); private JButton jbd = new JButton("订单管理"); private JButton jbe = new JButton("VIP服务"); private JButton jbf = new JButton("退出系统"); /** * 后台首页默认显示下右容器内容 */ public void kk() { jpc.removeAll();// 清空上一次的所有组件内容 jpc.setBackground(Color.red); // 自定义添加组件 JButton jbutton = new JButton("这是康康服务内容"); jpc.add(jbutton); // 刷新 jpc.repaint(); // 重绘 jpc.validate(); } public void kh() { jpc.removeAll();// 清空上一次的所有组件内容 jpc.setBackground(Color.yellow); // 自定义添加组件 JButton jbutton = new JButton("这是客户管理的内容"); jpc.add(jbutton); // 刷新 jpc.repaint(); // 重绘 jpc.validate(); } public Demo2() { this.setTitle(""); this.setSize(700, 450); this.setDefaultCloseOperation(3); this.setLocationRelativeTo(null); jla.setFont(new Font("华文新魏", Font.BOLD, 40)); jpa.add(jla); jpb.add(jba); jpb.add(jbb); jpb.add(jbc); jpb.add(jbd); jpb.add(jbe); jpb.add(jbf); kk(); // 康康服务按钮 jba.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { kk(); } }); jbb.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { kh(); } }); jsp2.setDividerSize(2); jsp2.setDividerLocation(100); jsp2.setLeftComponent(jpb); jsp2.setRightComponent(jpc); jsp.setDividerSize(2); jsp.setDividerLocation(60); jsp.setTopComponent(jpa); jsp.setBottomComponent(jsp2); this.getContentPane().add(jsp); this.setVisible(true); } public static void main(String[] args) { new Demo2(); } }
4.进度条的使用
import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JSplitPane; /** * JProgressBar 进度条 * * @author Zkingzz * */ public class Demo3 extends JFrame { boolean flag = true; private JPanel jpa = new JPanel(); private JProgressBar jpb = new JProgressBar(); private JButton jba = new JButton("开始启动"); private JButton jbb = new JButton("停止"); public Demo3() { this.setTitle(""); this.setSize(700, 450); this.setDefaultCloseOperation(3); this.setLocationRelativeTo(null); // 设置进度条的宽度和高度 jpb.setPreferredSize(new Dimension(600, 20)); jpb.setValue(0);// 设置进度值 jpb.setStringPainted(true);// 设置进度上的进度值 jpb.setMinimum(0);// 设置最小的进度值 jpb.setMaximum(100);// 设置最大的进度值 // System.out.println("获取: "+jpb.getValue());//获取进度条加载到那个值了 jpa.add(jpb); jpa.add(jba); jpa.add(jbb); this.getContentPane().add(jpa); //启动按钮 jba.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { flag = true; //点一下加一下 // jpb.setValue(jpb.getValue()+1); //利用多线程原理 相当于 请一个机器人帮我们做事 new Thread() { public void run() { while(flag) { try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } jpb.setValue(jpb.getValue()+1); if(jpb.getValue() == 100) { JOptionPane.showMessageDialog(null, "下载成功"); break; } } }; }.start(); } }); jbb.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { flag = false; } }); this.setVisible(true); } public static void main(String[] args) { new Demo3(); } }