Swing高级控件

这篇文章给大家演示一下Swing中的高级控件的用法,为了方面大家入门,我们的示例将会尽可能的简化。Swing中的高级控件包括JTabbedPane(页签),JPanel(面板),JDesktopPane(桌面窗格),JInternalFrame(内部窗口),JProgressBar(进度条),JTree(树),JMenuBar(菜单栏),JPopupMenu(右键菜单),JToolBar(工具栏),JSplitPane(分隔窗格),JTable(表格),JSlider(滑动栏)等。运行效果如下:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Swing高级控件

代码如下:

package org.leno.swing.demo1;

import java.awt.*;

import java.awt.event.*;

import java.net.URL;

import javax.swing.*;

import javax.swing.border.*;

import javax.swing.tree.*;

/**

* @author leno

* @version 1.0

* 一个例子程序让大家系统地了解Swing中一些高级控件(JTabbedPane,JPanel,JDesktopPane

* ,JInternalFrame,JProgressBar,JTree,JMenuBar,JPopupMenu,JToolBar,JSplitPane

* ,JTable,JSlider)的基本用法这里只是来个大杂烩在实际应用中要注意取舍灵活机变。

* http://blog.****.net/lenotang 转载请保留相关出处信息!

*/

public class DemoSuperComponent {

public static Dimension HGAP5 = new Dimension(5, 1);

public static Dimension VGAP5 = new Dimension(1, 5);

public static Dimension HGAP25 = new Dimension(25, 1);

public static Dimension VGAP25 = new Dimension(1, 25);

@SuppressWarnings("serial")

public static void main(String[] args) {

// 创建一个主窗体

JFrame jFrame = getMainFrame();

// 获得窗体的内容窗格

Container contentPane = jFrame.getContentPane();

// 创建一个选项面板(也叫页签)

JTabbedPane jTabbedPane = getMainTabbedPane();

// 创建一个放置滑动条的面板

JPanel jPanel1 = getSliderPanel();

// 创建一个放置二维表格的面板

JPanel jPanel2 = getTablePanel();

// 创建一个放置分隔窗格的面板

JPanel jPanel3 = getSplitPanePanel();

// 创建一个放置工具栏的面板

JPanel jPanel4 = getToolBarPanel();

// 创建一个放置菜单栏的面板

JPanel jPanel5 = getMenuBarPanel();

// 创建一个放置右键菜单的面板

JPanel jPanel6 = getPopupMenuPanel();

// 创建一个放置树结构的面板

JPanel jPanel7 = getTreePanel();

// 创建一个放置进度条的面板

JPanel jPanel8 = getProgressBarPanel();

// 创建一个放置内部窗体的面板(带桌面)

JPanel jPanel9 = getInternalFramesPanel(jTabbedPane);

// 创建一个放置对话框的面板

JPanel jPanel10 = getDialogPanel();

// 创建一个放置滚动窗格的面板

JPanel jPanel11 = getScrollPanel();

// 将创建的这些面板都放入到一个选项面板中

jTabbedPane.add("滑动条", jPanel1);

jTabbedPane.add("二维表格", jPanel2);

jTabbedPane.add("分隔窗格", jPanel3);

jTabbedPane.add("工具栏", jPanel4);

jTabbedPane.add("菜单栏", jPanel5);

jTabbedPane.add("右键菜单", jPanel6);

jTabbedPane.add("", jPanel7);

jTabbedPane.add("进度条", jPanel8);

jTabbedPane.add("内部窗口", jPanel9);

jTabbedPane.add("对话框", jPanel10);

jTabbedPane.add("滚动窗格", jPanel11);

// 将选项面板组件放置在容器中(充分体现组件放在容器中,容器又是组件的思想)

contentPane.add(jTabbedPane);

// 设置窗体可见

jFrame.setVisible(true);

}

private static JPanel getScrollPanel() {

JPanel jPanel11 = new JPanel();

jPanel11.setLayout(null);

Object[] privs = new Object[]{"增加用户","删除用户","修改用户","预览用户"};

JList jList = new JList(privs);

JScrollPane jScrollPane = new JScrollPane();

jScrollPane.setBounds(200, 50, 120, 60);

jScrollPane.getViewport().add(jList);

jPanel11.add(jScrollPane);

return jPanel11;

}

private static JFrame getMainFrame() {

// 设置美化外观

JFrame.setDefaultLookAndFeelDecorated(true);

// 创建一个窗体

JFrame jFrame = new JFrame("示例高级Swing控件");

// 设置窗体的位置和大小

jFrame.setSize(800, 600);

// 取得屏幕大小和窗口大小

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

Dimension frameSize = jFrame.getSize();

// 设置窗口能够在当前屏幕居中显示

if (frameSize.width > screenSize.width) {

frameSize.width = screenSize.width;

}

if (frameSize.height > screenSize.height) {

frameSize.height = screenSize.height;

}

jFrame.setLocation((screenSize.width - frameSize.width) / 2,

(screenSize.height - frameSize.height) / 2);

// 设置手动布局,这样意味着放在jFrame内容窗格上的组件都要指定自身的位置和大小,否则将不会显示。JFrame默认布局方式为BorderLayout

jFrame.setLayout(null);

// 设置窗体的关闭行为

jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

return jFrame;

}

private static JTabbedPane getMainTabbedPane() {

JTabbedPane jTabbedPane = new JTabbedPane();

jTabbedPane.setTabPlacement(JTabbedPane.LEFT);

jTabbedPane.setBounds(0, 0, 650, 500);

return jTabbedPane;

}

private static JPanel getDialogPanel() {

final JPanel jPanel10 = new JPanel();

JButton jButton1 = new JButton("输入对话框");

jButton1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

JOptionPane.showInputDialog(jPanel10, "请输入您的姓名?");

}

});

JButton jButton2 = new JButton("警告对话框");

jButton2.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

JOptionPane

.showMessageDialog(

jPanel10,

"<html><h1><span style=/"color:red/">HTML格式的警告内容!</span></h1></html>",

"紧急通知", JOptionPane.WARNING_MESSAGE);

}

});

JButton jButton3 = new JButton("确认对话框");

jButton3.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

int result = JOptionPane.showConfirmDialog(jPanel10,

"你认为自己足够优秀吗?");

if (result == JOptionPane.YES_OPTION) {

JOptionPane.showMessageDialog(jPanel10, "不错!");

} else if (result == JOptionPane.NO_OPTION) {

JOptionPane.showMessageDialog(jPanel10, "要自信!");

}

}

});

JButton jButton4 = new JButton("消息对话框");

jButton4.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

URL img = getClass().getResource(

"/resources/images/optionpane/bottle.gif");

String imagesrc = "<img src=/"" + img

+ "/" width=/"284/" height=/"100/">";

String message = "你快迟到了!";

JOptionPane.showMessageDialog(jPanel10, "<html>" + imagesrc

+ "<br><center>" + message + "</center><br></html>");

}

});

JButton jButton5 = new JButton("组件对话框");

jButton5.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

JTextField t[] = new JTextField[4];

t[0] = new JTextField("输入姓名:");

t[0].setEditable(false);

t[1] = new JTextField();

t[2] = new JTextField("输入密码:");

t[2].setEditable(false);

t[3] = new JTextField();

String but[] = new String[] { "确定" };

int result = JOptionPane.showOptionDialog(null, t, "登陆信息",

JOptionPane.YES_OPTION,

JOptionPane.INFORMATION_MESSAGE, null, but, but[0]);

if (result == 0) {

JOptionPane.showMessageDialog(jPanel10, "登陆成功");

}

}

});

jPanel10.add(jButton1);

jPanel10.add(jButton2);

jPanel10.add(jButton3);

jPanel10.add(jButton4);

jPanel10.add(jButton5);

return jPanel10;

}

private static JPanel getInternalFramesPanel(JTabbedPane jTabbedPane) {

JPanel jPanel9 = new JPanel();

jPanel9.setLayout(null);

// 创建桌面

JDesktopPane desktop = new JDesktopPane();

desktop

.setBounds(0, 0, jTabbedPane.getWidth(), jTabbedPane

.getHeight());

// 为桌面添加5个内部窗口

for (int i = 0; i < 5; i++) {

JInternalFrame internal = new JInternalFrame("桌面内部窗口" + i, true,

true, true, true);

internal.setSize(250, 250);

internal.setIconifiable(true);

// 将组件移到新位置。通过此组件父级坐标空间中的 x y 参数来指定新位置的左上角。

internal.setLocation(i * 20, i * 20);

internal.setVisible(true);

Icon icon = new ImageIcon(DemoSuperComponent.class

.getResource("/resources/images/plain/Splash.jpg"));

internal.getContentPane().add(new JLabel(icon));

desktop.add(internal);

}

jPanel9.add(desktop);

return jPanel9;

}

@SuppressWarnings("serial")

private static JPanel getProgressBarPanel() {

JPanel jPanel8 = new JPanel();

final JProgressBar jProgressBar = new JProgressBar(

JProgressBar.HORIZONTAL, 0, 100) {

public Dimension getPreferredSize() {

return new Dimension(300, super.getPreferredSize().height);

}

};

final Timer timer = new javax.swing.Timer(100, new AbstractAction() {

public void actionPerformed(ActionEvent e) {

if (jProgressBar.getValue() < jProgressBar.getMaximum()) {

jProgressBar.setValue(jProgressBar.getValue() + 1);

}

}

});

Action loadAction = new AbstractAction("启动") {

public void actionPerformed(ActionEvent e) {

timer.start();

}

};

JButton loadButton = new JButton(loadAction);

Action stopAction = new AbstractAction("停止") {

public void actionPerformed(ActionEvent e) {

timer.stop();

}

};

JButton stopButton = new JButton(stopAction);

jPanel8.add(jProgressBar);

jPanel8.add(loadButton);

jPanel8.add(stopButton);

return jPanel8;

}

private static JPanel getTreePanel() {

JPanel jPanel7 = new JPanel();

DefaultMutableTreeNode root = new DefaultMutableTreeNode("根节点");

DefaultMutableTreeNode parent = new DefaultMutableTreeNode("枝节点");

DefaultMutableTreeNode leaf = new DefaultMutableTreeNode("叶子节点");

parent.add(leaf);

root.add(parent);

JTree tree = new JTree(root);

jPanel7.add(tree);

return jPanel7;

}

private static JPanel getPopupMenuPanel() {

final JPanel jPanel6 = new JPanel();

final JPopupMenu jPopupMenu = new JPopupMenu();

JMenuItem menuItem1 = new JMenuItem("保存");

JMenuItem menuItem2 = new JMenuItem("编辑");

JMenuItem menuItem3 = new JMenuItem("删除");

jPopupMenu.add(menuItem1);

jPopupMenu.add(menuItem2);

jPopupMenu.add(menuItem3);

jPanel6.addMouseListener(new MouseAdapter() {

@Override

public void mousePressed(MouseEvent e) {

int mask = e.getModifiers();

if (mask == 4) {

jPopupMenu.show(jPanel6, e.getX(), e.getY());

}

}

});

jPanel6.add(jPopupMenu);

return jPanel6;

}

private static JPanel getMenuBarPanel() {

JPanel jPanel5 = new JPanel();

jPanel5.setLayout(null);

// 菜单栏

JMenuBar menuBar = new JMenuBar();

menuBar.setBounds(0, 0, 200, 30);

// 菜单

JMenu menu = new JMenu("菜单一");

JMenu menu2 = new JMenu("菜单二");

JMenu menu3 = new JMenu("菜单三");

// 菜单项

JMenuItem jMenuItem = new JMenuItem("普通菜单项");

JMenuItem jMenuItem2 = new JRadioButtonMenuItem("单选菜单项");

JMenuItem jMenuItem3 = new JCheckBoxMenuItem("复选菜单项");

menu.add(jMenuItem);

menu.addSeparator();

menu.add(jMenuItem2);

menu.add(jMenuItem3);

menuBar.add(menu);

menuBar.add(menu2);

menuBar.add(menu3);

jPanel5.add(menuBar);

return jPanel5;

}

private static JPanel getToolBarPanel() {

JPanel jPanel4 = new JPanel();

// 产生一个工具栏对象

JToolBar jToolBar = new JToolBar();

for (int i = 0; i < 20; i++) {

final String text = String.valueOf(i + 1);

Icon icon = new ImageIcon(DemoSuperComponent.class

.getResource("/resources/images/buttons/" + i + ".gif"));

JButton jButton = new JButton(text, icon);

jButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

JOptionPane.showMessageDialog(null, text);

}

});

jToolBar.add(jButton);

}

jPanel4.add(jToolBar);

return jPanel4;

}

private static JPanel getSplitPanePanel() {

JPanel jPanel3 = new JPanel();

jPanel3.setLayout(new BorderLayout());

JLabel lab1 = new JLabel("左边", JLabel.CENTER);

JLabel lab2 = new JLabel("右边", JLabel.CENTER);

JSplitPane jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,

lab1, lab2);

jSplitPane.setDividerSize(10); // 设置分割条的宽度

// 设置continuousLayout属性的值,在用户干预要使子组件连续地重新显示和布局子组件

// jSplitPane.setContinuousLayout(true);

// 分隔面板的分隔条显示出箭头

jSplitPane.setOneTouchExpandable(true);

jSplitPane.setDividerLocation(200);

jPanel3.add(jSplitPane);

return jPanel3;

}

private static JPanel getTablePanel() {

JPanel jPanel2 = new JPanel();

// 标题列

Object[] booksColumn = { "图书名称", "图书作者", "图书价格" };

// 二维表格数据

Object[][] dataset = { { "java", "brucl", "85" },

{ "jsp", "lenotang", "67" }, { "javascript", "lunce", "54" } };

JTable jTable = new JTable(dataset, booksColumn);

jTable.setBackground(Color.orange);

// jTable.setBounds(50, 50, 400, 150);

// JTableHeader header = jTable.getTableHeader();

// header.setBackground(Color.blue);

// header.setBounds(50,30,400,20);

JScrollPane scrollPane = new JScrollPane(jTable);

jPanel2.add(scrollPane);

return jPanel2;

}

private static JPanel getSliderPanel() {

JPanel jPanel1 = new JPanel();

GridLayout g = new GridLayout(1, 2);

g.setHgap(5);

g.setVgap(5);

jPanel1.setLayout(g);

BevelBorder border = new BevelBorder(BevelBorder.LOWERED);

// 创建一个水平面板,容纳水平滚动条

JPanel hp = new JPanel();

hp.setLayout(new BoxLayout(hp, BoxLayout.Y_AXIS));

hp.setBorder(new TitledBorder(border, "SliderDemo.horizontal",

TitledBorder.LEFT, TitledBorder.ABOVE_TOP));

jPanel1.add(hp);

// 创建一个垂直面板,容纳垂直滚动条

JPanel vp = new JPanel();

vp.setLayout(new BoxLayout(vp, BoxLayout.X_AXIS));

vp.setBorder(new TitledBorder(border, "SliderDemo.vertical",

TitledBorder.LEFT, TitledBorder.ABOVE_TOP));

jPanel1.add(vp);

JSlider jSlider = new JSlider();

jSlider.setOrientation(JSlider.HORIZONTAL);// 设置方向

jSlider.setMinimum(0);// 设置最小值

jSlider.setMaximum(100);// 设置最大值

jSlider.setMajorTickSpacing(20);// 设置主标号间隔

jSlider.setMinorTickSpacing(5);// 设置辅标号间隔

jSlider.setPaintLabels(true);// Default:false显示标签

jSlider.setPaintTicks(true);// Default:false显示标号

jSlider.setPaintTrack(true);// Determines whether the track is painted

// on the slider

jSlider.setValue(0);// 设置初始值

JPanel p = new JPanel();

p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));

p.setBorder(new TitledBorder("SliderDemo.plain"));

p.add(Box.createRigidArea(VGAP5));

p.add(jSlider);

p.add(Box.createRigidArea(VGAP5));

hp.add(p);

hp.add(Box.createRigidArea(VGAP25));

p = new JPanel();

p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));

p.setBorder(new TitledBorder("SliderDemo.plain"));

jSlider = new JSlider(JSlider.VERTICAL, -10, 100, 20);

p.add(Box.createRigidArea(HGAP25));

p.add(jSlider);

p.add(Box.createRigidArea(HGAP25));

vp.add(p);

vp.add(Box.createRigidArea(HGAP25));

return jPanel1;

}

}