|
package
com.ibm.www.test;
import
javax.swing.
*
;
import
java.awt.
*
;
import
java.awt.event.
*
;
import
javax.swing.tree.
*
;
import
javax.swing.event.
*
;
import
javax.swing.border.
*
;
import
javax.swing.table.
*
;
/** */
/**
* Swing 组件测试程序 * 测试Swing所有组件及其相应的事件 *
@author
天翼.李 2003.4.17 晚23:14 *
@link
http://www.robochina.org
*
@link
robococde@etang.com
*/
public
class
SwingTest
extends
JFrame
{
/** */
/**
* 主模块,初始化所有子模块,并设置主框架的相关属性
*/
public
SwingTest()
{
//
初始化所有模块
MenuTest menuTest
=
new
MenuTest(); LeftPanel leftPanel
=
new
LeftPanel(); RightPanel rightPanel
=
new
RightPanel(); BottomPanel bottomPanel
=
new
BottomPanel(); CenterPanel centerPanel
=
new
CenterPanel();
//
设置主框架的布局
Container c
=
this
.getContentPane();
//
c.setLayout(new BorderLayout())
this
.setJMenuBar(menuTest); c.add(leftPanel,BorderLayout.WEST); c.add(rightPanel,BorderLayout.EAST); c.add(centerPanel,BorderLayout.CENTER); c.add(bottomPanel,BorderLayout.SOUTH);
//
利用无名内隐类,增加窗口事件
this
.addWindowListener(
new
WindowAdapter()
{
public
void
WindowClosing(WindowEvent e)
{
//
释放资源,退出程序
dispose(); System.exit(
0
); }
}
); setSize(
700
,
500
); setTitle(
"
Swing 组件大全简体版
"
);
//
隐藏frame的标题栏,此功暂时关闭,以方便使用window事件
//
setUndecorated(true);
setLocation(
200
,
150
); show(); }
////////////////////////////////////////////////////////////////////////////
/** */
/**
* 菜单栏处理模块 * JMenuBar --+ * --JMenu--+ * --JMenuItem --ActionListener *
*/
class
MenuTest
extends
JMenuBar
{
private
JDialog aboutDialog;
/** */
/**
* 菜单初始化操作
*/
public
MenuTest()
{ JMenu fileMenu
=
new
JMenu(
"
文件
"
); JMenuItem exitMenuItem
=
new
JMenuItem(
"
退出
"
,KeyEvent.VK_E); JMenuItem aboutMenuItem
=
new
JMenuItem(
"
关于
"
,KeyEvent.VK_A); fileMenu.add(exitMenuItem); fileMenu.add(aboutMenuItem);
this
.add(fileMenu); aboutDialog
=
new
JDialog(); initAboutDialog();
//
菜单事件
exitMenuItem.addActionListener(
new
ActionListener()
{
public
void
actionPerformed(ActionEvent e)
{ dispose(); System.exit(
0
); }
}
); aboutMenuItem.addActionListener(
new
ActionListener()
{
public
void
actionPerformed(ActionEvent e)
{
//
"关于"对话框的处理
aboutDialog.show(); }
}
); }
/** */
/**
* 返回关于对话框
*/
public
JDialog getAboutDialog()
{
return
aboutDialog; }
/** */
/**
* 设置"关于"对话框的外观及响应事件,操作和JFrame一样都是在内容 * 框架上进行的
*/
public
void
initAboutDialog()
{ aboutDialog.setTitle(
"
关于
"
); Container con
=
aboutDialog.getContentPane();
//
Swing 中使用html语句
Icon icon
=
new
ImageIcon(
"
smile.gif
"
); JLabel aboutLabel
=
new
JLabel(
"
<html><b><font size=5>
"
+
"
<center>Swing 组件大全简体版!
"
+
"
<br>天翼.李
"
,icon,JLabel.CENTER);
//
JLabel aboutLabel = new JLabel("Swing 组件大全简体版!",icon,JLabel.CENTER);
con.add(aboutLabel,BorderLayout.CENTER); aboutDialog.setSize(
450
,
225
); aboutDialog.setLocation(
300
,
300
); aboutDialog.addWindowListener(
new
WindowAdapter()
{
public
void
WindowClosing(WindowEvent e)
{ dispose(); }
}
); }
}
////////////////////////////////////////////////////////////////////////////
/** */
/**
* 最左边模块,继承JPanel,初始化内容为JTree * JPanel--+ * --JTree
*/
class
LeftPanel
extends
JPanel
{
private
int
i
=
0
;
public
LeftPanel()
{ DefaultMutableTreeNode root
=
new
DefaultMutableTreeNode(
"
Root
"
); DefaultMutableTreeNode child
=
new
DefaultMutableTreeNode(
"
Child
"
); DefaultMutableTreeNode select
=
new
DefaultMutableTreeNode(
"
select
"
); DefaultMutableTreeNode child1
=
new
DefaultMutableTreeNode(
""
+
i); root.add(child); root.add(select); child.add(child1); JTree tree
=
new
JTree(root); tree.getSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
//
每个节点的行高
tree.setRowHeight(
20
); tree.addTreeSelectionListener(
new
TreeSelectionListener ()
{
public
void
valueChanged(TreeSelectionEvent e)
{
//
内隐类不能直接引用外部类tree,1.外部变量可申明为final 2.新建外部类的对象
JTree tree
=
(JTree)e.getSource(); DefaultMutableTreeNode selectNode
=
(DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); i
++
; selectNode.add(
new
DefaultMutableTreeNode(
""
+
i)); }
}
); tree.setPreferredSize(
new
Dimension(
100
,
300
));
//
tree.setEnabled(true);
JScrollPane scrollPane
=
new
JScrollPane(tree);
//
scrollPane.setSize(100,350);
this
.add(scrollPane); }
}
////////////////////////////////////////////////////////////////////////////
/** */
/**
* 最下面层模块,继承JPanel,初始化内容为进度条,并由定时器控制 * JPanel--+ * --JProcessBar --Timer
*/
class
BottomPanel
extends
JPanel
{
private
JProgressBar pb;
public
BottomPanel()
{ pb
=
new
JProgressBar(); pb.setPreferredSize(
new
Dimension(
680
,
20
));
//
设置定时器,用来控制进度条的处理
Timer time
=
new
Timer(
1
,
new
ActionListener()
{
int
counter
=
0
;
public
void
actionPerformed(ActionEvent e)
{ counter
++
; pb.setValue(counter); Timer t
=
(Timer)e.getSource();
//
如果进度条达到最大值重新开发计数
if
(counter
==
pb.getMaximum())
{ t.stop(); counter
=
0
; t.start(); }
}
}
); time.start(); pb.setStringPainted(
true
); pb.setMinimum(
0
); pb.setMaximum(
1000
); pb.setBackground(Color.white); pb.setForeground(Color.red);
this
.add(pb); }
/** */
/**
* 设置进度条的数据模型
*/
public
void
setProcessBar(BoundedRangeModel rangeModel)
{ pb.setModel(rangeModel); }
}
////////////////////////////////////////////////////////////////////////////
/** */
/**
* 最右边模块,继承JPanel,初始化各种按钮 * JPanel--+ * --JButton --JToggleButton -- JList -- JCombox --JCheckBox .
*/
class
RightPanel
extends
JPanel
{
public
RightPanel()
{
this
.setLayout(
new
GridLayout(
8
,
1
));
//
初始化各种按钮
JCheckBox checkBox
=
new
JCheckBox(
"
复选按钮
"
); JButton button
=
new
JButton(
"
打开文件
"
); button.addActionListener(
new
ActionListener()
{
public
void
actionPerformed(ActionEvent e)
{ JFileChooser file
=
new
JFileChooser();
int
result
=
file.showOpenDialog(
new
JPanel());
if
(result
==
file.APPROVE_OPTION)
{ String fileName
=
file.getSelectedFile().getName(); String dir
=
file.getCurrentDirectory().toString(); JOptionPane.showConfirmDialog(
null
,dir
+
"
\\
"
+
fileName,
"
选择的文件
"
,JOptionPane.YES_OPTION); }
}
}
); JToggleButton toggleButton
=
new
JToggleButton(
"
双态按钮
"
); ButtonGroup buttonGroup
=
new
ButtonGroup(); JRadioButton radioButton1
=
new
JRadioButton(
"
单选按钮1
"
,
false
); JRadioButton radioButton2
=
new
JRadioButton(
"
单选按钮2
"
,
false
);
//
组合框的处理
JComboBox comboBox
=
new
JComboBox(); comboBox.setToolTipText(
"
点击下拉列表增加选项
"
); comboBox.addActionListener(
new
ActionListener()
{
public
void
actionPerformed(ActionEvent e)
{ JComboBox comboBox
=
(JComboBox)e.getSource(); comboBox.addItem(
"
程序员
"
); comboBox.addItem(
"
分析员
"
); }
}
);
//
列表框的处理
DefaultListModel litem
=
new
DefaultListModel(); litem.addElement(
"
香蕉
"
); litem.addElement(
"
水果
"
); JList list
=
new
JList(litem); list.addListSelectionListener(
new
ListSelectionListener ()
{
public
void
valueChanged(ListSelectionEvent e)
{ JList l
=
(JList)e.getSource(); Object s
=
l.getSelectedValue(); JOptionPane.showMessageDialog(
null
,s,
"
消息框
"
,JOptionPane.YES_OPTION); }
}
);
//
增加按钮组
buttonGroup.add(radioButton1); buttonGroup.add(radioButton2);
//
增加各种按钮到JPanel中显示
add(button); add(toggleButton); add(checkBox); add(radioButton1); add(radioButton2); add(comboBox); add(list);
this
.setBorder(
new
EtchedBorder(EtchedBorder.LOWERED,Color.LIGHT_GRAY,Color.blue)); }
}
////////////////////////////////////////////////////////////////////////////
/** */
/**
* 中间层模块,继承JPanel,初始化页签,并在页签中设置文本区,表格, * 文本区上下用分隔条分隔 * JPanel--+ * -JTabbedPane--+ * --Draw --JTable -JTextAreas -JText --JPopupMenu
*/
class
CenterPanel
extends
JPanel
{
public
CenterPanel()
{ JTabbedPane tab
=
new
JTabbedPane(JTabbedPane.TOP); JTextField textField
=
new
JTextField(
"
文本域,点击打开<文件按钮>可选择文件
"
); textField.setActionCommand(
"
textField
"
); JTextPane textPane
=
new
JTextPane(); textPane.setCursor(
new
Cursor(Cursor.TEXT_CURSOR)); textPane.setText(
"
编辑器,试着点击文本区,试着拉动分隔条。
"
); textPane.addMouseListener(
new
MouseAdapter ()
{
public
void
mousePressed (MouseEvent e)
{ JTextPane textPane
=
(JTextPane)e.getSource(); textPane.setText(
"
编辑器点击命令成功
"
);
//
textField.setText(""+textPane.getText());
}
}
);
/**/
/*
UpperCaseDocument doc = new Document(); textField.setDocumentsetDocument(doc); doc.addDocumentListener(new DocumentListener() { public void changedUpdate(DocumentEvent e){} public void removeUpdate(DocumentEvent e){} public void insertUpdate(DocumentEvent e) { Document text = (Document)e.getDocument(); text.setText("复制成功"); } });
*/
JSplitPane splitPane
=
new
JSplitPane(JSplitPane.VERTICAL_SPLIT,textField,textPane); JTable table
=
new
JTable(
10
,
10
);
//
table.showHorizontalLines(true);
//
table.showVerticalLines(true);
//
table.gridColor(Color.blue);
JPanel pane
=
new
JPanel(); pane.add(table.getTableHeader(),BorderLayout.NORTH); pane.add(table); tab.addTab(
"
文本演示
"
,splitPane);
//
tab.addTab(table.getTableHeader());
tab.addTab(
"
表格演示
"
,pane); tab.setPreferredSize(
new
Dimension(
500
,
600
));
this
.add(tab);
this
.setEnabled(
true
); }
}
public
static
void
main(String args[])
{
//
设置主框架属性,此处没有使用,可打开看看效果
//
try
//
{
//
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
//
}
//
catch (Exception e){}
new
SwingTest(); }
}
|