GUI菜单设计、对话框JPotionPane、列表JTable、JTree、 登录界面模拟

来源:互联网 发布:北京网络免费征婚 编辑:程序博客网 时间:2024/05/16 13:44

1.菜单设计

菜单组件是由多个类组成的:

  • JMenuBar(菜单栏)
  • JMenu(菜单)
  • JMenuItem(菜单项)
每个菜单组件都包括一个菜单栏、每个菜单栏有包含N个菜单,每个菜单包含N个菜单项。
import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JSeparator;public class JMenuBar1 {public static void main(String[] args) { JFrame f = new JFrame();//创建窗口 f.setSize(300, 400);//设置窗口大小 f.setLocation(200, 300);//设置窗口位置 JMenuBar jmb = new JMenuBar();//创建菜单栏 f.setJMenuBar(jmb);//将菜单栏添加到窗口中 JMenu m1 = new JMenu("文件");//创建菜单 JMenu m2 = new JMenu("编辑");//创建菜单 JMenu m3 = new JMenu("工具");//创建菜单 JMenu m4 = new JMenu("帮助");//创建菜单 jmb.add(m1);//将菜单添加到菜单栏中 jmb.add(m2); jmb.add(m3); jmb.add(m4); JMenuItem mi1 = new JMenuItem("新建");//创建菜单项 JMenuItem mi2 = new JMenuItem("复制"); JMenuItem mi3 = new JMenuItem("剪切"); JMenuItem mi4 = new JMenuItem("删除"); mi2.add(new JSeparator());//添加横向分割线  JSeparator:分隔符 mi3.add(new JSeparator()); mi1.setMnemonic('H');//给菜单加上键盘访问键F,Ait+N   没得反应的 m1.add(mi1);//将菜单项添加到菜单中 m1.add(mi2); m1.add(mi3); m1.add(mi4); mi1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("选择了菜单文件→新建");
}}); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true);}}

2.运用各种对话框JPotionPane

在Java中可以利用JOptionPane类中的static方法来生成各种标准的对话框,实现显示出信息、提出问题、警告、用户输入参数等功能,这些对话框都是模式对话框。
  • InputDialog——提示输入文本
  • MessageDialog——显示信息
  • ConfirmDialog——确认对话框、提出问题,然后由用户自己来确认
  • OptionDialog——组合其他三个对话框类型
import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;/*对话框*/public class JOptionPane1 {public static void main(String[] args) {// 创建窗口JFrame f = new JFrame("消息框");// 创建大小f.setSize(300, 400);f.setLocation(500, 200);// 添加布局f.setLayout(new FlowLayout());// 添加按钮JButton but = new JButton("点击消息框");f.add(but);// 给按钮添加监听器事件but.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 1.消息框JOptionPane.showMessageDialog(null, "消息框");}});JButton but2 = new JButton("点击确认对话框");f.add(but2);// 给按钮添加监听器事件but2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 2.确认对话框int type = JOptionPane.showConfirmDialog(null, "确认提交吗?");switch (type) {case JOptionPane.YES_OPTION:JOptionPane.showMessageDialog(null, "您选择的:是!!");break;case JOptionPane.NO_OPTION:JOptionPane.showMessageDialog(null, "您选择的:否!!");break;case JOptionPane.CANCEL_OPTION:JOptionPane.showMessageDialog(null, "您选择的:是!!");break;case JOptionPane.CLOSED_OPTION:JOptionPane.showMessageDialog(null, "您选择的:否!!");break;}}});JButton but3 = new JButton("点击文本输入框");f.add(but3);but3.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 3.文本输入框String value = JOptionPane.showInputDialog("请输入东西:");JOptionPane.showMessageDialog(null, value);}});f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}

3.JTable列表运用

import java.awt.Dimension;import java.awt.FlowLayout;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.ListSelectionModel;public class JTable1 {public static void main(String[] args) {JFrame f = new JFrame("表格");f.setSize(300, 200);f.setLocation(300, 400);f.setLayout(new FlowLayout());// 1.创建列名/* * Vector<String> v = new Vector<>(); v.add("product产品"); * v.add("Number of Boxes物件号码"); v.add("Price价格"); */String[] columnNames = { "product产品", "Number of Boxes物件号码", "Price价格" };// 2.创建数据Object[][] data = { { "Apples", 5, "5.00" }, { "Oranges", 3, "6.00" },{ "Pears", 2, "4.00" }, { "Grapes", 3, "2.00" } };// 3.创建表格对象JTable table = new JTable(data, columnNames);//4.设置表格的宽和高table.setPreferredScrollableViewportSize(new Dimension(300, 200));/*6.设置表格自动缩放,如果JTable的一个列或JTable窗口自身的大小被重新确定,那么,其他列会相应缩小或放大,以适应新的窗口。使用setAutoResizeMode方法就能控制这种行为*/table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);/* 7.在默认情况下,当用户在JTable里选中一个单元格时,整个行都被选中了。有多种方法能够让用户自定义选中的方式, * 利用ListSelectionModel接口,可以允许用户选中单个或多个行:SINGLE_SELECTION(允许一次选择一行)、 * SINGLE_INTERVAK_SELECTION(允许选中相邻的一系列行)、MULTIPLE_INTERVAL_SELECTION(也允许选中相邻的行, * 但是带有扩展功能,它允许用户使用Ctrl键进行多个互不相邻的选择)*/table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//设置选中单元格相当于选中一行/* * 5.如果直接将table对象添加到JFrame面板上,显示的结果中并不会显示表头,想要显示表头, * 就必须把表格添加到JScrollPane中,然后将JScrollPane添加到窗口中 */JScrollPane scrollPane = new JScrollPane();//滚动面板scrollPane.setViewportView(table);f.add(scrollPane);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}


4.JTree

利用JTree类,可以显示等级体系的数据。
import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JScrollPane;import javax.swing.JTree;import javax.swing.event.TreeSelectionEvent;import javax.swing.event.TreeSelectionListener;import javax.swing.tree.DefaultMutableTreeNode;public class JTree1 {public static void main(String[] args) {JFrame f = new JFrame("创建一个数");f.setSize(300, 400);f.setLocation(300, 300);// 创建根节点DefaultMutableTreeNode root = new DefaultMutableTreeNode("公司部门");// 创建椰子节点项目部DefaultMutableTreeNode lef1 = new DefaultMutableTreeNode("项目部");// 创建项目部的叶子节点lef1.add(new DefaultMutableTreeNode("张二娃"));lef1.add(new DefaultMutableTreeNode("李麻口"));lef1.add(new DefaultMutableTreeNode("王三娃"));lef1.add(new DefaultMutableTreeNode("邓老台"));DefaultMutableTreeNode lef2 = new DefaultMutableTreeNode("咨询部");lef2.add(new DefaultMutableTreeNode("张三"));lef2.add(new DefaultMutableTreeNode("李四"));lef2.add(new DefaultMutableTreeNode("王五"));lef2.add(new DefaultMutableTreeNode("邓六"));DefaultMutableTreeNode lef3 = new DefaultMutableTreeNode("市场部");lef3.add(new DefaultMutableTreeNode("赵云"));lef3.add(new DefaultMutableTreeNode("关羽"));lef3.add(new DefaultMutableTreeNode("张飞"));root.add(lef1);root.add(lef2);root.add(lef3);JTree tree = new JTree(root);// 对树节点做出响应tree.addTreeSelectionListener(new TreeSelectionListener() {@Overridepublic void valueChanged(TreeSelectionEvent e) {DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();if (node == null) {return;}Object object = node.getUserObject();if (node.isLeaf()) {JOptionPane.showMessageDialog(null, object.toString());}}});/* * 为了防止树展开利用的空间太多,最好将树添加到滚动面板中 */JScrollPane scroll = new JScrollPane();scroll.getViewport().add(tree);f.add(scroll);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}}

5.QQ登录模拟界面

import java.awt.BorderLayout;import java.net.URL;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JTextField;/**QQ登录界面 */public class QQLogin {public QQLogin() {QQLoginUI();}private void QQLoginUI(){JFrame f = new JFrame("QQ用户登录");JPanel jp = new JPanel(new BorderLayout());//设置logoURL loginImg = QQLogin.class.getClassLoader().getResource("login.png");//图片的位置JLabel imgPanel = new JLabel(new ImageIcon(loginImg));f.add(imgPanel,BorderLayout.NORTH);//用户名和密码JPanel nameAndPwd = new JPanel();//用户名JPanel userName = new JPanel();userName.add(new JLabel("账号"));JTextField nameFile = new JTextField(15);userName.add(nameFile);userName.add(new JLabel("账号注册"));//密码JPanel pwdPanel = new JPanel();pwdPanel.add(new JLabel("密码"));JPasswordField pwdField = new JPasswordField(15);pwdPanel.add(pwdField);pwdPanel.add(new JLabel("找回密码"));//加入到面板nameAndPwd.add(userName);nameAndPwd.add(pwdPanel);f.add(nameAndPwd,BorderLayout.CENTER);//登录按钮JPanel buttonPanel = new JPanel();buttonPanel.add(new JButton("登录"));f.add(buttonPanel,BorderLayout.SOUTH);f.setSize(350, 350);//位置居中f.setLocationRelativeTo(null);//大小不可改变f.setResizable(false);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);}public static void main(String[] args) {new QQLogin();}}
0 0
原创粉丝点击