JavaSE中Swing类中的一些典型的组件

来源:互联网 发布:知乎手机如何发文章 编辑:程序博客网 时间:2024/05/20 10:23

1.为组件设置边框
Border是Swing提供的一个接口
Border bb=BorderFactory.creatTitledBorder(BorderFactory.creatEtchedBorder(),”标题边框的标题”);

setBorder(new TitledBorder(new EtchedBorder(),”标题边框的标题”));

2.Swing的键盘驱动
//把一次键盘事件和一个aCommand对相关联
component.getInputMap().put(aKeyStroke,aCommand);
//将aCommand对象和anAction事件响应关联
component.getActionMap().put(aCommand,anAction);

Action sendMsg=new AbstractAction(){
public void actionPerformed(ActionEvent e){
JTextArea.append(JTextField.getText()+”\n”);
JTextField.setText(“”);
}
};

JTextField.getInputMap().put(KeyStroke.getKeyStroke(‘\n’,java.awt.event,InputEvent.CTRL_MASK),”send”);
JTextField.getActionMap().put(“send”,sendMsg);

3.使用JToolBar创建工具条
一旦创建了JToolBar对象之后,JToolBar还有几个常用方法
JButton add(Action a):通过Action对象为JToolBar添加对应的工具按钮.值得指出的是,Action本身不是按钮,也不是菜单项,只是当把Action对象添加到某些容器中时(也可以直接使用Action来创建按钮),如菜单和工具栏中时,
这些容器会为该Action对象创建对应的组件。也就是说这些容器需要完成如下事情: 创建一个适用于该容器的组件(例如在工具栏中创建一个工具按钮) 从Action对象中获得对应的属性来设置该组件(例如,通过name设置文本,通过icon
设置图标) 检查Action对象的初始状态,只有处于激活状态的Action所对应的Swing组件才可以相应用户动作 通过Action对象为对应组件注册事件监听器。时间处理器就是Action里的actionPerformed()方法。

JToolBar jtb=new JToolBar();

Action pasteAction=new AbstractAction(“粘贴”,new ImageIcon(“d:\ico\fuck.png”)){
public void actionPerformed(ActionEvent e){
………..
}
};

Action copyAction =new AbstractAction(“复制”,new ImageIcon(“d:\ico\kcuf.png”)){
public void actionPerformed(ActionEvent e){
…………

   }

};

jtb.add(copyAction);
jtb.addSeparator();
jtb.add(pasteAction);
jf.add(jtb,BorderLayout.NORTH);

4.使用Java7增强的JFileChooser来生成文件对话框(图片查看器)
JFileChooser的功能和AWT中的FileDialog基本相似,也是用于生成“打开文件”,“保存文件”对话框
为了调用JFileChooser来打开一个文件对话框,必须创建该对话框的实例,JFileChooser提供了多个构造器来创建JFileChooser对象,他的构造器总共包含两个参数
currentDirectory:指定所创建文件对话框的当前路径 FileSystemView:用于指定基于该文件系统外观来创建文件对话框
JFileChooser并不是Dialog的子类,所以不能使用setVisible(true)方法显示文件对话框 而是调用showXxxDialog()来显示文件对话框

大致过程:
1.采用构造器传建一个JFileChooser对象.
2.调用JFileChooser的一系列可选方法对JFileChooser执行初始化操作
3.如果让文件对话框实现文件过滤功能,则需要结合FileFilter类来进行过滤,JFileChooser提供了两个方法来安装文件过滤器
addChoosableFileFilter(FileFilter filter); setFileFilter(FileFilter filter);
4.如果需要改变文件对话框中文件的视图外观,则可以结合FileView类来改变对话框中文件的视图外观
5.调用showXxxDialog(component parent,String approveButtonText)方法打开文件对话框
会返回int类型的值 JFileChooser.APPROVE_OPTION JFileChooser.CANAEL_OPTION JFileChooser.ERROR_OPTION分别为同意、取消、错误按钮。
6.JFileChooser一般需要一个预览图片的组件和显示图片列表的组件

FileFilter类里面有两个方法必须写 一个是 boolean accept(File f):判断过滤器是否接受指定的文件
另一个是String getDescription():返回该过滤器的描述性文本
FileView类可以通过重写getIcon()方法来改变文件对话框中的文件图标

JFileChooser chooser=new JFileChooser(“.”);
ExtensionFileFilter filter=new ExtensionFileFilter();
//为选择器选择一个预览图片的附件
JLabel accessory=new JLabel();
//用于显示图片列表的JLabel组件
JLabel label=new JLabel();

public void init(){
filter.addExtension(“jpg”);
filter.addExtension(“jpeg”);
filter.addExtension(“gif”);
filter.addExtension(“png”);
filter.setDescription(“图片文件(.jpg,.jpeg,.gif,.png)”);
//以上五局都是设置过滤器的描述性文本

 //为文件选择器指定自定义的FileView对象 chooser.setFileView(new FileIconView(filter)); chooser.addChoosableFileFilter(filter); //用于检测被选择文件改变事件 chooser.addPropertyChangeeListener(event->{     if(event.getPropertyName()==JFileChooser.SELECTED_FILE_CHANGED_PROPERTY){         File f=(File) event.getNewValue();         if(f==null){            accessory.setIcon(null);            return;         }         ImageIcon icon=new ImageIcon(f.getPath());         if(icon太大,就缩小他){            ..........         }         accessory.setIcon(icon);             } }); JMenuItem openItem=new JMenuItem("打开"); openItem.addActionListener(event->{    int result=chooser.showDialog(JFrame,"打开图片文件");    if(result==JFileChooser.APPROVE_OPTION){        String name=chooser.getSelectedFile().getPath();        label.setIcon(new ImageIcon(name));    } });

}

class ExtensionFileFilter extends FileFilter{
private String description;
private ArrayList extensions=new ArrayList<>();
public void addExtension(String extension){
if(!extension.startsWith(“.”)){
extension=”.”+extension;
extensions.add(extension.toLowwerCase());
}
}
public void setDescription(String aDescription){
description=aDescription;
}
public void getDescription(){
return description;
}
public boolean accept(File f){
if(f.isDirectory()) return true;
String name=f.getName().toLowerCase();
for(String extension:extensions){
if(name.endsWith(extension)){
return true;
}
}
}
}

class FileIconView extends FileView{
public Icon getIcon(File f){

    ...............    }

}

5.使用JOptionPane创建一些简单的对话框

6.使用JSplitPane用来创建一个分割面板,他可以将一个组件(通常是一个容器)分割成2部分,并提供一个分隔条,用户可以拖动分割条来调整两个部分的大小
new JSplitPane(方向,左/上插件,右/下插件);
JSplitPane默认关闭连续布局特性,因为使用连续布局特性需要不断重绘两边的组件,因此运行效率很低,
如果需要打开指定JSplitPane面板的连续布局特性:jsp.setContinuousLayout(true);
如果需要打开“一触即展”特性,使用如下代码jsp.setOneTouchExpandable(true);

JList booklist=new JList<>(books);
JLabel bookcover=new JLabel();//JLabel可以放文字也可以放图片
JTextArea bookDesc=new JTextArea();

JSplistPane left=new JSplitPane(JSplitPane.VERTICAL_SPLIT,true,bookcover,new JScrollPane(bookDesc));

JSplitPane content=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,left,booklist);

7.使用JTabbedPane可以很方便的在窗口上放置多个标签页,每个标签页相当于获得了一个与外部容器具有相同大小的组件摆放区域。

创建一个JTabbedPane对象,JTabbedpane提供了几个重载的构造器,这些构造器一共包含两个参数
tabPlacement:该参数指定标签页标题的放置位置 有TOP LEFT BOTTOM RIGHT四个选项
tabLayoutPolicy:指定标签页标题的布局策略。当窗口不足以在同一行摆放所有的标签页标题时有两种处理方法: (标题换行)JTabbedPane.WRAP_TAB_LAYOUT (使用滚动条控制) SCROLL_TAB_LAYOUT
若开始时没有指定这两个参数后面也可以用setTablLayoutPolicy()改变标签页标题的布局和setTabPlacement()设置标签页标题的放置位置

调用JTabbedPane对象的addTab(),insertTab(),setComponentAt(),removeTabAt()方法来增加,插入,修改,删除标签页;
添加标签页的时候可以指定该标签页的标题(title),图标(icon),Tab页面的组件(component),以及提示信息(tip)
tabbedPane.addTab(bookName,icon,null,tip);

如果需要让某得标签页显示出来,则可以通过调用JTabbedPane得setSelectedIndex()方法

setIconAt(int index,Icon icon):设置指定标签页的图标
setTitleAt(int index,String title):设置指定位置标签页的标题为title

当用户单击某个标签时才载入该标签页面的内容,则可以使用ChangeListener监听器来监听JTabbedPane的对象

JTabbedPane tabbedPane=new JTabbedPane(JTabbedPane.LEFT,JTabbedPane.WRAP_TAB_LAYOUT);
ImageIcon icon=new ImageIcon(“d:\ico\close.gif”)
Map

原创粉丝点击