Swing笔记

JFrame:基础窗口
JLabel:纯文本
JButton:按钮
JTextField:输入文本框

Swing有内置的专用线程来接受UI事件并更新屏幕(如果从其他线程着手对屏幕的操作,可能产生冲突和死锁)

例子:
1
2
3
4
5
SwingUtilities.invokeLater(new Runnable () {
public void run() {
//TODO the operation about the screen
}
});

(不再直接操作JLabel,而是提交一个Runnable,当事件队列获取这通任务时,执行这个Runnable,不会做其他事情。前提是所有代码都如此提交,包括main。将包含初始化组件的任务在内部都设置为在SwingUtilities.invokeLater内调用)

JFrame默认使用BorderLayout

JTextArea: 多行文本输入 (常用方法append,可以rollback)

1
2
3
4
5
JTextArea t = new JTextArea(20, 40);
t.setLineWrap(true); //设置自动换行,默认为不换行
t.setWrapStyleWord(true); //断行不断字(不会把一个词分在两行中显示)
JFrame jFrame = new JFrame();
jFrame.add(new JScrollPane(t)); //JScrollPane,给组件增加滚动条

Container:面板,用于添加组件,布局等。JFrame实际不能直接设布局和添加组件,但JDK简化了写法,使得给JFrame的操作默认传给Container。
setLayout:设置布局
JFrame extends Frame
Frame extends Window
Window extends Container
( super.setLayout(…);)
布局管理器自适应窗口大小,如果窗口大小尺寸改变,组件的大小,形状和位置都会做出相应的改变

布局:
①BorderLayout:四个边框区域和一个中间区域
使用面板重载的add方法:

1
jFrame.add(BorderLayout.NORTH, new JButton());

除CENTER,加入的组件都是沿一个方向压缩到最小尺寸,同时在另一个方向上拉伸到最大尺寸。而CENTER是两个方向同时拉伸,以覆盖中间区域。

②FlowLayout:流布局。组件自左到右流动到窗体,占满空间后换行。组件为合适大小(刚好充满标签的大小)

③GridLayout:表格布局。创建一个放置组件的表格,依次放入。组件大小:自适应窗体。
例子:new GridLayout(7, 3); //默认为(n, 1);

④绝对定位:setLayout(null); 把容器的布局管理器设置为空,然后使用setBounds( )方法来定位组件
(比较简单粗暴,但是在不同大小的屏幕中显示效果会不一样)

各种按钮:
new BasicArrowButton(BasicArrowButton.NORTH);
JToggleButton, JCheckBox复选框, JRadioButton单选
ButtonGroup 按钮组:将多个AbstractButton对象添加进去,然后只有一个可以选中(排他)
例子:将两个JRadioButton加到ButtonGroup实现单选
(PS:对于JButton无效,因为只有一个状态,加以监听)

ImageIcon对象:获取文件地址以及文件名,即可用作程序中的图标
组件:setRolloverEnabled(true); //是否可以翻转,组件图标是否能改变
setRolloverIcon(icon); //设置松开时的图标
setPressedIcon(icon);
setToolTipText(“…”); //悬浮时,组件的提示语
setBorder(Border border); //设置一个边框

JTextField获取数据: jtf.getText(); setEditable(); //默认为true

组合框JComboBox 多选一,如果可自写,setEditable(true); getSelectedIndex(0 ~ n-1), 如果自定义,返回-1 getSelectedItem()

列表框JList
与JComboBox的区别:总是占据一定屏幕,可以多选(ctrl)
getSelectedValues();返回被选中的items,返回一个字符串数组。
JList本身没有对滚动条提供直接支持,需用通过JScrollPane

页签面板:JTabbedPane
类似文件夹的页签,里面可容纳多个组件(页面) 使用例子:浏览器上方选择不同页面的面板

消息框:
JOptionPane.showMessageDialog(); //消息对话框
JOptionPane.showConfirmDialog(); //确认对话框
返回值为int: JOptionPane.YES_OPTION <=> 0 , JOptionPane.NO_OPTION <=> 1 ,
JOptionPane.CANCEL_OPTION <=> 2 , JOptionPane.CLOSED_OPTION <=> -1

caidan :JMenuBar 能拥有菜单的组件,包括JApplet,JFrame,JDialog及它们的子类。 setMenuBar()方法

JPopupMenu 弹出式菜单 编写自定义对话框: extends JDialog

JDialog 默认布局: BorderLayout
setVisiable(true); 必须显式调用才可以使得Dialog显示出来 dispose(); 关闭JDialog,释放资源

文本对话框:JFileChooser 可用于选择,打开文件,保存文件等功能

1
2
3
4
5
6
JFileChooser jfc = new JFileChooser();
jfc.setFileSelectionMode(JFileChooser.FILES_ONLY); //只选文件
//其他参数 DIRECTORIES_ONLY , FILES_AND_DIRECTORIES
int value = jfc.showOpenDialog(null); //打开一个文件选择对话框
int value1 = jfc.showSaveDialog(null); //弹出保存文件选择框
//返回值: APPROVE_OPTION 为正常,其他都是有错误的情况

getSelectedFile(), getCurrentDirectory() 用于查询操作的返回结果

Container的validate(); 使容器再次布置其子组件(刷新容器的作用)

任何能接受文本的组件都可以接受HTML文本(Swing组件上的HTML)
(必须使文本以标记开始,然后就可以开始使用HTML标记)

Jslider 滑块 ProgressMonitor 进度条

选择外观:①可插拔外观(跨平台,默认) ②只适应当前系统的外观
选择②:

1
2
3
4
5
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch(Exception e) {
throw new RuntimeException(e);
} //写在main()开头
-------------本文结束感谢您的阅读-------------