- Swing 窗口
- 1. JFrame窗口
- 其构造方法如下:
- JFrame()
- JFrame(String title)
- 其常用方法如下:
- void setDefaultCloseOperation(int operation) 设置关闭按钮的操作
- setIconImage(Image p_w_picpath) 设置窗口图标
- setContentPane(Container contentPane) 设置内容面板
- setJMenuBar(JMenuBar menubar) 设置菜单栏
- repaint(long time , int x,int y,int width,int height) 在time毫秒内重绘指定的区域
- setLayout(Layout) 设置布局管理器
- remove(Component comp) 移除指定控件
- static void setDefaultLookAndFeelDecorated(boolean defaultLookAndFeelDecorated) 新建的窗口是否具有外观装饰
- 例如: import javax.swing.*;
- import java.awt.*;
- public class jjtt extends JFrame{
- public jjtt(String title){
- super(title);
- setSize(315,190);
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- Panel panel=new Panel();
- panel.add(new Button("a"));
- setContentPane(panel);
- }
- public static void main(String args[]){
- JFrame.setDefaultLookAndFeelDecorated(true);
- new jjtt("jjtt").setVisible(true);
- }
- }
- setDefaultCloseOperation(int xx) 其参数可以取值:
- WindowConstants.DO_NOTHING_ON_CLOSE
- windowConstants.HIDE_ON_CLOSE
- windowConstants.DISPOSE_ON_CLOSE
- windowConstants.EXIT_ON_CLOSE
- 2. JOptionPane 标准对话框
- 此用于创建向用户发出信息的对话框,最常见的对话框有四种:
- showConfirmDialog showInputDialog showMessageDialog showOptionDialog
- 1. showConfirmDialog
- static int showConfirmDialog(Component parentCom,Object message,String title,int optionType,int messageType,Icon icon)
- message要显示的内容 title标题 optionTYpe 对话框按钮的类型 messageType 为图标的类型 icon为自定义图标
- optionType可以为:
- YES_NO_OPTION :是否按钮
- YES_NO_CANCEL_OPTION :是否取消按钮
- OK_CANCEL_OPTION :确定,取消按钮
- MessageType可以为:
- ERROR_MESSAGE :出错图标
- INFORMATION_MESSAGE:信息图标
- WARING_MESSAGE :警告图标
- QUESTION_MESSAGE: 询问图标
- PLAIN_MESSAGE :无图标
- 该各个返回值可以是:
- YES_OPTION NO_OPTION CANCEL_OPTION OK_OPTION CLOSED_OPTION
- 例如:
- import javax.swing.*;
- public class jjtt extends JFrame{
- public jjtt(){
- setSize(345,260);
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- }
- public static void main(String args[]){
- jjtt j=new jjtt();
- j.setVisible(true);
- int select=JOptionPane.showConfirmDialog(j,"go on ?","option",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
- System.out.println(select==JOptionPane.YES_OPTION?"GO ON":"STOP");
- int s=JOptionPane.showConfirmDialog(j,"go on ?","option",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,new ImageIcon("1.jpg"));
- }
- }
- 2. showMessageDialog
- static void showMessageDialog(Component parentcom,Object message,String titlt,int messageType,Icon icon)
- 示例: JOptionPane.showMessgaeDialog(this,"done","option",JOptionPane.INFORMATION_MESSAGE);
- 3. showInputDialog
- static String showInputDialog(Component parentcomp,Object message,String title,int messageType)
- 示例: String postcode=JOptionPane.showInputDialog(this,"input code","option",JOptionPane.WARING_MESSAGE);
- 4. showOptionDialog
- 该类型对话框可以自定义操作按钮:
- static int showOptionDialog(Component parentcom,Object Message,String title,int optionType,int messageType,Icon icon,Object[] option,Object initialValue);
- 这里的options表示用户可能的选择项数组,initialValue表示默认值只有在使用options时候才有意义,否则为null
- 3. JColorChooser 颜色选择器
- 其提供了一个重要的静态方法 showDialog() , 用于弹出颜色选择对话框
- static Color showDialog(Component parentcom,String title,Color initialColor);
- Color color=JColorChooser.showDialog(this,"choose color",Color.RED);
- 示例: Label lable=new Label("aaa");
- j.add(lable);
- Color color=JColorChooser.showDialog(j,"choose",j.getBackground());
- lable.setForeground(color);
- 4. 文件选择器JFileChooser
- 其常用的构造方法如下:
- JFileChooser() 构造一个指向用户目录的JFileChooser
- JFileChooser(File currentDirectory) 根据指定的路径构造JFileChooser
- JFileChooser(String currentDirectoryPath) 根据指定的路径构造JFileChooser
- 例如:
- JFileChooser jfc1=new JFileChooser();
- jfc1.showOpenDialog(this); 在window平台下默认打开 我的文档 文件夹
- JFileChooser jfc2=new JFileChooser(new File("."));
- jfc2.showOpenDialog(this); 默认打开读取工作目录
- 有时可能只希望选择文件,或者只选择文件夹,JFileChooser通过三个静态属性:
- static int DIRECTORIES_ONLY 仅显示目录
- static int FILES_AND_DIRECTORIES 显示目录和文件
- static int FILES_ONLY 仅显示文件
- JFileChooser 同时提供了setFileSelectMode() 方法来设置模式
- 如果只希望选择word ...文件,也就是文件过滤,我们需要利用javax.swing.filechooser包中的文件扩展名过滤器 FileNameExtensionFilter
- FileNameExtensionFilter(String description,String ...extensions) description是对文件扩展名的描述,extensions表示具体的扩展名
- 示例: FileNameExtensionFilter filter=new FileNameExtensionFilter("office","doc","xml","ppt");
- 现在我们需要打开该对话框,JFileChooser提供了静态方法 showDialog() showOpenDialog()
- int showDialog(Component parentcom,String approveButtonText) 弹出具有自定义打开按钮的自定义文件选择对话框
- int showOpenDialog(Component parentcom) 在父容器中打开文件选择器对话框
- 示例: jfc1.showDialog(this,"choose file") jfc2.showOpenDialog(this)
- 区别在于前者使用"choose file" 作为打开按钮和对话框标题文字,而后者使用默认的打开字样
- 最后,我们怎么判断用户是选择了打开还是 取消, 可以通过showDialog() showOpenDialog() 的返回值来判定
- 可能的返回值如下:
- JFileChooser.CANCEL_OPRION
- JFileChooser.APPROVE_OPTION
- JFileChooser.ERROR_OPTION
- 示例:
- JFileChooser chooser=new JFileChooser();
- chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
- FileNameExtensionFilter filter=new FileNameExtensionFilter("office","doc","xls","ppt");
- chooser.setFileFilter(filter);
- int se=chooser.showOpenDialog(j);
- if(se==JFileChooser.APPROVE_OPTION){
- try{
- Runtime.getRuntime().exec(new String[] {
- "cmd.exe","/C",chooser.getSelectedFile().toString()
- });
- }catch(IOException e){
- e.printStackTrace();
- }
- }
- Swing 容器
- 1. JPanel面板
- 通过JPanel对控件进行包装,是一种通用的小型容器,其构造方法:
- JPanel() 创建具有双缓冲和FlowLayoutb布局的JPanel
- JPanel(boolean isDoubleBuffered) 是否使用双缓冲
- JPanel(Layout) 具有指定Layout
- JPanel(Layout,boolean isDoubleBuffered)
- 2. JTabbedPanel 标签化面板
- 此面板为用户提供了一组控件之间进行切换的能力,其构造方法如下:
- JTabbedPanel() 创建一个具有默认 JTabbedPanel.TOP 选项卡布局的标签化面板
- JTabbedPanel(int tabPlacement) 使用指定的布局tabPlacement创建 tabPlacement可以是JTabbedPanel.TOP JTabbedPanel.BOTTOM JTabbedPanel.LEFT JTabbedPanel.ROGHT
- JTabbedPanel(int tabPlacement,int tabLayputPolicy) 使用指定的布局 指定的布局策略 布局策略可以是JTabbedPane.WRAP_TAB_LAYOUT 自动折行
- JTabbedPane.SCROLL_TAB_LAYOUT 滚动选项卡
- JTabbedPane提供了addTab()方法用于添加选项卡标签,该方法格式如下:
- void addTab(String title,Component com) 添加一个标题为title且没有图标的选项卡 com为单击此选项卡时要显示的控件
- void addTab(String title,Icon icon,Component com) 有图标
- void addTab(String title,Icon icon,Component com,String tip) tip为鼠标指向选项卡时要显示的提示文字
- 此过程为:
- 创建JTabbedPane对象,创建包含各种组件的容器Container,添加选项卡标签 container作为addTab()的参数,将tabbedPane加到窗口
- 3. JSplitPane 拆分面板
- 用于将两个控件进行图形化分割,而且这两个控件可以有用户交互式调整大小,其构造函数如下:
- JSplitPane() 将控件水平排列
- JSplitPane(int newOrientation) 创建一个指定方向且无连续布局的JSplitPane,方向可以是 JSplitPane.HORIZONTAL_SPLIT 水平 JSplitPane.VERTICAL_SPLIT垂直
- JSplitPane(int newOrientation,boolean newContinuousLayout) 具有指定重绘方式,为true时表示当分割条改变位置时 连续重绘控件,否则只有当移动停止时才重绘控件
- JSplitPane(int newOrientation,boolean newContinuousLayout,Component newLeftComponent,Component newRightComponent) 第一个控件出现在左边或上边,第二个出现在下面或右边
- JSplitPane(int newOrientation,Component newLeftComponent,Component newRightComponent) 不连续重绘
- 示例:
- JSplitPane splitPane=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,new Button("a"),new Button("b"));
- 4. JScrollPane 滚动面板
- 此面板是根据滚动条策略显示水平或垂直滚动条,其构造方法如下:
- JScrollPane() 创建一个根据面板内容自动显示水平和垂直滚动条的面板
- JScrollPane( Component view ) 创建一个显示指定控件view 自动显示滚动条
- JScrollPane(Component view ,int vsbPolicy,int hsbpolicy) 具有指定滚动策略 vsbpolicy 可以是ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED , 当需要时垂直
- ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER 从不显示垂直滚动条 ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS
- ScrollPaneConstants.HPRIZONTAL_SCROLLBAR_AS_NEEDED ScrollPaneConstants.HPRIZONTAL_SCROLLBAR_NEVER ScrollPaneConstants.HPRIZONTAL_SCROLLBAR_ALWAYS
- 示例:
- JScrollPane srcollPane=new JScrollPane(new Button("aa"),ScrollPaneConstants.HPRIZONTAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
- 工具栏JToolBar
- 其提供了快捷方式,其创建方法如下:
- JToolBar() 默认水平的工具栏
- JToolBar(int orientation) 具有指定方向 JToolBar.HORIZONTAL JToolBar.VERTICAL
- JToolBar(String name) 具有指定名称的工具栏
- JToolBar(String name,int orientation)
- 示例:
- JToolBar toolBar=new JToolBar("toolbar");
- toolbar.setFloatable(false); //不允许拖动工具栏
- Button o=new Button("open");
- Button c=new Button("close");
- Button s=new Button("save");
- Button e=new Button("exit");
- toolBar.add(o);
- toolBar.add(c);
- toolBar.add(s);
- toolBar.add(new JToolBar.Separator()); //按钮之间添加分隔符
- toolBar.add(e);
- toolBar.setLayout(new FlowLayout(FlowLayput.CENTER,1,1));
- add(toolBar);
- 5. 桌面面板和内部框架
- JDesktopPane用于创建多文档界面的容器,可以在其内部包含多个子窗口。其只有一个构造方法: JDesktopPane()
- 对于子窗口,JDesktopPane提供了setDragMode(int dragMode) 方法设置拖拉方式,参数可以是 JDesktopPane.LIVE_DRAG_MODE 拖动子窗口时候显示器内容
- JDesktopPane.OUTLINE_DRAG_MODE 不显示
- 我们可以先创建JDesktopPane然后向其内部加入子窗口 JInternalFrame,其构造方法如下:
- JInternalFrame() 子窗口不可调整大小不可最大最小化,不可关闭
- JInternalFrame(String title) 具有标题
- JInternalFrame(String title,boolean resizable) 是否可调大小
- JInternalFrame(String title,boolean resizable,boolean closable) 是否可关闭
- JInternalFrame(String title,boolean resizable,boolean closable,boolean maximizable) 是否可最大化
- JInternalFrame(String title,boolean resizable,boolean closable,boolean maximizable,boolean iconifiable) 是否可图标化
- 示例:
- import javax.swing.*;
- import java.awt.*;
- public class jjtt extends JFrame {
- public jjtt(String title){
- super(title);
- setSize(900,1236);
- setResizable(false);
- JDesktopPane desktop=new CreateDeaktopPane();
- createFrame(desktop,3); //创建三个子窗口
- setContentPane(desktop);
- }
- protected void createFrame(JDesktopPane desktop,int num){
- JInternalFrame frame=null;
- for(int i=0;i<num;i++){
- frame=new JInternalFrame("窗口"+i,true,true,true,true);
- frame.setSize(179,100);
- frame.setLocation(i*20,i*20);
- frame.setVisible(true);
- desktop.add(frame);
- }
- }
- public static void main(String args[]){
- //JFrame.setDefaultLookAndDecorated(false);
- new jjtt("multi").setVisible(true);
- }
- class CreateDeaktopPane extends JDesktopPane{
- public CreateDeaktopPane(){
- setDragMode(JDesktopPane.LIVE_DRAG_MODE);
- }
- protected void paintComponent(Graphics g){
- g.drawImage(Toolkit.getDefaultToolkit().getImage("1.jpg"),0,0,this);
- }
- }
- }
- Swing控件
- 1. Jlabel
- 其有6种构造方法:
- JLabel()
- JLabel(Icon p_w_picpath)
- JLabel(Icon p_w_picpath,int horizontalAlignment ) 水平对齐方式 horizontalAlignment 可以是SwingConstants.LEFT 左对齐
- SwingConstants.CENTER SwingConstants.RIGHT SwingConstants.LEADING 对齐文本开始边 SwingConstants.TRAILING 对齐文本结束边
- JLabel(String text) 具有指定文本
- JLabel(String text,Icon icon ,int horizontalAlignment )
- JLabel(String text,int horizontalAlignment )
- 示例:
- JPanel pane=new JPanel();
- JLabel label1=new JLbael("1",new ImageIcon("7.icon"),SwingConstatns.CENTER);
- JLabel label2=new JLbael("2",new ImageIcon("7.icon"),SwingConstatns.CENTER);
- panel.add(label1);
- panel.add(label2);
- 文本控件
- 2. JTextField
- 其构造方法如下:
- JTextField()
- JTextField(Document doc,String text,int col) 指定的Document对象创建文本框,一般情况下其默认的文档类型是PlainDocument对象
- JTextField(int col)
- JTextField(String text) 初始文本
- JTextField(String text,int col)
- 示例:
- JTextField no,name,course;
- no=new JTextField(10);
- name=new JTextField("zhang san");
- course=new JTextField();
- JPasswordField
- 用于创建密码框,其还提供了一个方法 setEchoChar() 方法,用于设置用户输入时的回显字符
- 如果希望输入密码时显示为 * 则可以:
- JPasswordField pw=new JPasswordField(10);
- pw.setEchoChar('*');
- 其提供 getPassword() 方法返回存储有密码的字符数组
- JTextArea
- 其本身不带滚动条,如需要滚动效果,应将其对象加入一个滚动面板中,其提供了2个方法用于设置换行策略
- void setLineWrap(boolean wrap) 如果是true当长度大于所分配的长度时,自动换行
- void setWrapStyleWord(boolean word) 若为true当长度大于宽度时,将在单词边界处换行,否则在字符边界处换行 默认为false
- JFormattedTextField
- 其是对JTextField的扩展,添加对数据格式的支持,其常用的构造方法:
- JFormattedTextField()
- JFormattedTextField(Format format) 创建一个基于format的格式化文本
- JFormattedTextField(Object value) 具有默认值
- 最简单使用方式为:
- JFormattedTextField f=new JFormattedTextField();
- f.setColumns(10);
- 不过这样没有意义,要格式化输入,需要配合java.text包中的DataFormat MessageFormat NumberFormat 它们都是Format的子类
- DateFormat 该类提供了静态方法用于格式化日期
- static DateFormat getDateFormat() 获取具有默认用于环境 格式化风格 的日期格式器
- static DateFormat getDateInstance(int style) style可以是 DateFormat.MEDIUM DateFormat.LONG DateFormat.SHORT
- static DateFormat getDateInstance(int style,Locale alocale) 给定的区域
- static DateFormat getInstance() 默认为SHORT风格
- 示例:
- JFormattedTextField ft=new JFormattedTextField(DateFormat.getDateInstance(DateFormat.MEDIUM));
- ft.setValue(new Date()); //初始值为当前日期
- MessageFormat 用于格式化信息,其常用构造函数:
- MessageFormat(String patten) 构造默认用于环境和指定模式
- MessageFormat(String patten,Locale local) 用于环境
- 示例:
- JFormattedTextField ft=new JFormattedTextField();
- ft.setColumns(20);
- Object[] amount={ "2334","399"};
- String patten="total fee is {0}, own {1}"; { 0} 表示第一个元素
- ft.setValue(MessageFormat.format(patten,amount));
- NumberFormat 其提供了很多方法用于格式化数字
- static NumberFormat getCurrencyInstance() 返回默认语言环境的货币格式
- static NumberFormat getCurrencyInstance(Locale local) 返回指定语言环境的货币格式
- static NumberFormat getInstance() 返回默认用于环境的通用数值格式
- static NumberFormat getInstance(Locale local)
- static NumberFormat getIntegerInstance() 默认环境的整数格式
- static NumberFormat getIntegerInstance(Locale local)
- static NumberFormat getPercentInstance() 返回默认环境的百分比格式
- static NumberFormat getPercentInstance(Locale local)
- 示例:
- import javax.swing.*;
- import java.awt.*;
- import java.text.*;
- import java.util.*;
- public class jjtt extends JFrame{
- public jjtt(){
- setSize(500,600);
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- JPanel panel=new JPanel();
- panel.add(new JLabel("username"));
- panel.add(new JTextField(10));
- panel.add(new JLabel("passwrod"));
- JPasswordField password=new JPasswordField(10);
- password.setEchoChar('*');
- panel.add(password);
- panel.add(new JLabel("bei zhu"));
- JTextArea memo=new JTextArea(3,12);
- JScrollPane scrollPane=new JScrollPane(memo);
- panel.add(scrollPane);
- panel.add(new JLabel("date"));
- JFormattedTextField ft=new JFormattedTextField(DateFormat.getDateInstance(DateFormat.MEDIUM));
- ft.setValue(new Date());
- ft.setEditable(false);
- ft.setForeground(Color.red);
- panel.add(ft);
- panel.add(new JLabel("pour"));
- JFormattedTextField ft1=new JFormattedTextField(NumberFormat.getCurrencyInstance(new Locale("zh","cn")));
- ft1.setColumns(10);
- ft1.setValue(new Double(1234498));
- panel.add(ft1);
- add(panel);
- }
- public static void main(String args[]){
- new jjtt().setVisible(true);
- }
- }