Swing高级控件

摘要:
//获取表单ContainerContentPane=jFrame的内容窗格。getContentPane()//创建选项面板(也称为选项卡)JTabbedPanejTabbedPane=getMainTabbedPane();
 

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

 

Swing高级控件第1张

 

代码如下:

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.*;

 

/**

 *@authorleno

 *@version1.0

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

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

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

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

 */

publicclass DemoSuperComponent {

       publicstatic Dimension HGAP5 = new Dimension(5, 1);

       publicstatic Dimension VGAP5 = new Dimension(1, 5);

 

       publicstatic Dimension HGAP25 = new Dimension(25, 1);

       publicstatic Dimension VGAP25 = new Dimension(1, 25);

 

       @SuppressWarnings("serial")

       publicstaticvoid 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);

       }

 

       privatestatic 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;

       }

 

       privatestatic 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;

       }

 

       privatestatic JTabbedPane getMainTabbedPane() {

              JTabbedPane jTabbedPane = new JTabbedPane();

              jTabbedPane.setTabPlacement(JTabbedPane.LEFT);

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

              return jTabbedPane;

       }

 

       privatestatic JPanel getDialogPanel() {

              final JPanel jPanel10 = new JPanel();

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

              jButton1.addActionListener(new ActionListener() {

                     publicvoid actionPerformed(ActionEvent e) {

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

 

                     }

              });

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

              jButton2.addActionListener(new ActionListener() {

                     publicvoid 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() {

                     publicvoid actionPerformed(ActionEvent e) {

 

                            int result = JOptionPane.showConfirmDialog(jPanel10,

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

                            if (result == JOptionPane.YES_OPTION) {

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

                            } elseif (result == JOptionPane.NO_OPTION) {

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

                            }

 

                     }

              });

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

              jButton4.addActionListener(new ActionListener() {

                     publicvoid 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() {

                     publicvoid 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;

       }

 

       privatestatic 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")

       privatestatic JPanel getProgressBarPanel() {

              JPanel jPanel8 = new JPanel();

              final JProgressBar jProgressBar = new JProgressBar(

                            JProgressBar.HORIZONTAL, 0, 100) {

                     public Dimension getPreferredSize() {

                            returnnew Dimension(300, super.getPreferredSize().height);

                     }

              };

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

                     publicvoid actionPerformed(ActionEvent e) {

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

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

                            }

                     }

              });

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

                     publicvoid actionPerformed(ActionEvent e) {

                            timer.start();

                     }

              };

              JButton loadButton = new JButton(loadAction);

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

                     publicvoid actionPerformed(ActionEvent e) {

                            timer.stop();

                     }

              };

              JButton stopButton = new JButton(stopAction);

              jPanel8.add(jProgressBar);

              jPanel8.add(loadButton);

              jPanel8.add(stopButton);

              return jPanel8;

       }

 

       privatestatic 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;

       }

 

       privatestatic 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

                     publicvoid mousePressed(MouseEvent e) {

                            int mask = e.getModifiers();

                            if (mask == 4) {

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

                            }

                     }

 

              });

              jPanel6.add(jPopupMenu);

              return jPanel6;

       }

 

       privatestatic 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;

       }

 

       privatestatic 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() {

 

                            publicvoid actionPerformed(ActionEvent e) {

                                   JOptionPane.showMessageDialog(null, text);

 

                            }

 

                     });

                     jToolBar.add(jButton);

              }

              jPanel4.add(jToolBar);

              return jPanel4;

       }

 

       privatestatic 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;

       }

 

       privatestatic 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;

       }

 

       privatestatic 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;

       }

}

 

免责声明:文章转载自《Swing高级控件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JSON数据格式集合分析(转)linux下安装zabbix服务器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

delphi中时间控制

用TTimer的思路有点问题。 请参考以下思路:   窗体建立时,记录GetTickCount值(关于GetTickCount,请Google),然后,捕捉鼠标键盘消息,如有发送到本窗体的鼠标键盘消息,则重 新记录GetTickCount值,如无,则计算当前GetTickCount值减去原值是否大于规定时间,如大于则Close。 例子如下: //思路是这样...

Docking For WPF–AvalonDock

桌面程序的应用,不可避免的就会用到大量的布局控件,之前的一个项目也想过去做类似于Visual Studio的那种灵活的布局控件,也就是界面上的控件能够实现拖拽放置、隐藏、窗口化等一系列的操作,但由于开发时间以及需求的原因,没有太严格要求这方面功能的实现,也就只能算是想过一下而已,实际用的时候还是固定布局,但是最近接触到新的项目,需要这方面的应用就不得不自己...

WPF数据绑定(二)

前面讲了最近本的两种数据绑定,这次讲讲资源绑定和Context绑定 1、资源绑定 同样不需要写代码,仅仅需要配置XAML就可以了。 1 <TabItem Header="ResourceBinding"> 2 <StackPanel> 3...

WPF样式学习第一天

因为上班的公司要我用wpf写软件,刚毕业出来,学校也没教过wpf,只会winform,再加上wpf用winform的框架写法也能实现很多需求,但是就不能体现wpf的优点了,今天就先来学wpf的样式,因为对美的认识不足,所以排版不好,对代码有意见或建议的,希望多多提出,我是初学者。 今天就先弄个Button的简单样式吧 ButtonStyle是源名称。 P...

winform窗体 小程序【移动窗体和阴影】

窗体无边框设置后无法移动,引用API 使其获得功能 移动 //窗体移动API [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public static extern bool SendMessage(IntPt...

WinForm下窗体权限设计

权限设计 笔者不才看了园子里面很多园友写关于权限设计这块内容,那么笔者也在添一笔。这个是笔者在上完软件工程课程后,上交的一篇笔者论文,这里分享给大家交流,当然笔者经验尚浅,若内容有误,请大家指点出来,若大家有什么更好的想法,请提出来共同学习。 一.引言 在软件开发中, 从操作系统到一个仅仅能够发布文章的网站,都要涉及到权限的管理。在Windows 操作...