java菜单
java 17
10
11 12
frm.setTitle("List class");
for(int i=0;i<=10;i++) // 利用for循环加入选项 lst.add("List Item "+i);
13
14 15 16 17 18 19
lst.select(2); // 选取索引值为2的选项
frm.setSize(200,150); frm.add(lst); frm.setBackground(Color.yellow); frm.setVisible(true); System.out.println("lst.getRows()= "+lst.getRows()); System.out.println("lst.getItemCount()= "+lst.getItemCount());
06
static MenuBar mb=new MenuBar(); // 创建MenuBar对象
17 08
mb.add(menu2); static Menu menu2=new Menu("Exit");
21 12
menu2.add(mi4); static MenuItem mi4=new MenuItem("Close window");
Chapter 17
菜单、菜单栏
与
滚动条
选择窗体
选择窗体(list)可用来一次显示多个选项,Java
以List类来创建它。选择窗体的使用方式相当
简单,先用List类的add() 将选项加到窗体内,
java窗口设计代码
java窗口设计代码Java窗口设计代码Java窗口设计代码是指使用Java编程语言来创建和设计窗口界面的代码。
通过使用Java的窗口库,开发人员可以创建图形用户界面(GUI)并添加各种组件,如按钮、文本区域、下拉列表等,来与用户进行交互。
在下面的文章中,我将逐步介绍Java窗口设计代码的相关概念和步骤,帮助读者了解如何使用Java来创建窗口界面和与用户进行交互。
一、引入Java窗口库在使用Java窗口设计代码之前,我们首先需要引入Java窗口库。
Java提供了许多库,如AWT和Swing,用于创建窗口界面。
其中,Swing是AWT的升级版本,提供了更多的组件和功能。
要引入Swing库,我们需要在Java代码中添加以下语句:javaimport javax.swing.*;这样就可以使用Swing库提供的各种类和方法来设计窗口界面。
二、创建主窗口在Java窗口设计代码中,我们首先需要创建一个主窗口,作为整个窗口界面的容器。
可以通过继承JFrame类来创建主窗口,并使用以下代码:javapublic class MainFrame extends JFrame {public MainFrame() {设置主窗口的标题setTitle("Java窗口设计");设置主窗口的大小setSize(800, 600);设置主窗口的默认关闭操作setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);设置主窗口的布局setLayout(new BorderLayout());添加其他组件到主窗口...显示主窗口setVisible(true);}}在上述代码中,我们创建了一个`MainFrame`类,并继承了`JFrame`类。
然后,在`MainFrame`类的构造方法中,我们设置了主窗口的标题、大小、默认关闭操作和布局。
最后,我们添加其他组件到主窗口,并将主窗口设置为可见状态。
角色 菜单 表结构设计 java
角色菜单表结构设计java全文共四篇示例,供读者参考第一篇示例:角色菜单表结构设计在java中是一个非常重要的数据结构,它承载了系统中用户角色和菜单之间的关系,为系统权限管理提供了基础支持。
在实际项目中,设计一个合理的角色菜单表结构是至关重要的,因为它直接影响到系统的性能和功能的实现。
在java中,通常使用数据库来存储角色菜单表结构。
在设计表结构时,需要考虑以下几个方面:1. 角色表设计:角色表是系统中存储角色信息的表,通常包含角色的名称、描述、权限等字段。
在设计角色表时,需要考虑角色的唯一性,以及与其他表的关联性。
3. 角色菜单关联表设计:角色菜单关联表是用来存储角色和菜单之间的关联关系的表。
通常包含角色ID和菜单ID两个字段,用来表示一个角色对应多个菜单的关联关系。
下面我们通过一个实际的案例来演示如何设计角色菜单表结构。
假设我们有一个系统需要管理用户的角色和菜单访问权限,我们设计如下表结构:1. 角色表设计CREATE TABLE role(role_id INT PRIMARY KEY,role_name VARCHAR(50) UNIQUE NOT NULL,description TEXT,create_time TIMESTAMP DEFAULTCURRENT_TIMESTAMP);通过上面的设计,我们实现了角色表、菜单表和角色菜单关联表的设计。
在实际应用中,可以通过这些表结构来实现角色和菜单之间的关联关系,从而实现系统的权限管理功能。
在Java中,我们可以通过使用ORM框架(如Hibernate、MyBatis等)来操作数据库,简化开发过程。
通过实体类和映射文件的设置,我们可以快速地操作数据库,实现对角色菜单表结构的管理。
第二篇示例:## 角色菜单表结构设计及其在Java中的应用### 一、引言在很多软件系统中,我们经常会遇到角色与菜单之间的关系,即不同的角色有不同的权限去访问系统中的各种菜单功能。
编程选择题40道:Java开发工具:IDEA与Eclipse的使用.Tex
1.在 IntelliJ IDEA 中,如何创建一个新的 Java 项目?o A. 使用 File > New > Project 菜单选项,并选择 Javao B. 在主界面直接拖拽 Java 文件o C. 通过 Edit > Preferences 进行项目设置o D. View > Tool Windows > Maven Projects答案: A解析: 创建新项目是通过 File 菜单下的 New 选项,并选择 Project 开始的。
2.Eclipse 中,如何调整编辑器的字体大小?o A. Window > Preferences > General > Editors > Text Editorso B. 使用 Ctrl + Plus 和 Ctrl + Minuso C. Run > Run Configurationso D. Project > Properties > Java Compiler答案: A解析: 调整字体大小是在 Preferences 设置中,具体在 General 下的 Editors 和 Text Editors 菜单项中。
3.在 IntelliJ IDEA 中,如何启用版本控制功能?o A. File > Settings > Version Controlo B. 使用快捷键 Ctrl + Shift + Ao C. Help > Tips of the Dayo D. Build > Make Project答案: A解析: 启用版本控制需要在Settings 对话框的Version Control 分类里进行配置。
4.Eclipse 中,如何执行重构(Refactoring)操作?o A. Refactor > Renameo B. 使用快捷键 Ctrl + Shift + Ro C. File > New > Classo D. Edit > Find and Replace答案: A解析: Eclipse 提供的重构操作可以通过 Refactor 菜单下的 Rename 等选项执行。
java JMenu菜单
java JMenu菜单在一个窗口中,经常需要给窗口添加菜单条。
在Java中这一部分是由JMenuBar、JMenu和JMenuItem三个类实现的,分别对应菜单条、菜单和菜单项。
1.菜单栏(JMenuBar)创建菜单栏是制作菜单的第一步,并JMenuBar的构造方法相当简单,如通过“JMenuBar TestJMenuBar=new JMenuBar();”语句即可创建。
而在设置菜单栏时,可以通过表9-22所示的常用方法。
需要说明的是,JMenuBar类根据JMenu添加的顺序从左到右显示,并建立整数索引。
2.菜单(JMenu)在添加完菜单栏后,并不会显示任何菜单内容,所以还需要在菜单栏中添加菜单内容。
菜单内容的JMenu类的构造方法有4种:●JMenu( ) 构造一个空菜单。
●JMenu(Action a) 构造一个菜单,菜单属性由相应的动作来提供。
●JMenu(String s) 用给定的标志构造一个菜单。
●JMenu(String s,Boolean b) 构造一个新JMenu,用提供的字符串作为其文本并指定其是否为分离式(tear-off)菜单。
在构造完后,使用JMenuBar类的add方法添加到菜单栏中。
而JMenu的常用方法如表9-23所示。
3.菜单项(JMenuItem)在菜单中可以添加不同的内容,可以是菜单项(JMenuItem),可以是一个子菜单,也可以是分隔符。
子菜单的添加是直接将一个子菜单添加到母菜单中,而分隔符的添加只需要将分隔符作为菜单项添加到菜单中。
菜单的该实现是一个包含JMenuItem的弹出窗口,用户选择JMenuBar上的项时会显示该JMenuItem。
除JMenuItem之外,JMenu还可以包含JSeparator。
其菜单项的构建方法如下:●JMenuItem() 创建不带有设置文本或图标的JMenuItem。
●JMenuItem(Action a) 创建从指定的Action获取其属性的菜单项。
Java的GUI设计打造美观直观的用户界面
Java的GUI设计打造美观直观的用户界面Java是一种广泛使用的编程语言,拥有着强大的图形用户界面(GUI)设计能力。
通过使用Java提供的各种GUI库和工具,开发人员可以轻松地创建美观、直观的用户界面。
本文将介绍一些在Java中实现这样的GUI设计的方法和技巧。
一、选择合适的GUI库在Java中,有多个GUI库可供选择,比如Swing、JavaFX等。
选择合适的GUI库是设计美观直观界面的第一步。
Swing是一个成熟的GUI库,提供了丰富的组件和布局管理器,可以满足大部分GUI设计需求。
JavaFX是Java官方推荐的GUI库,它提供了更现代化的界面设计风格和更优秀的性能。
二、使用布局管理器布局管理器是GUI设计中重要的一环,它定义了组件在窗口中的位置和大小。
Java提供了多种布局管理器,如FlowLayout、BorderLayout、GridLayout等。
通过合理选择和组合这些布局管理器,可以实现各种复杂的界面布局。
三、使用合适的图标和图片图标和图片在GUI设计中起着很重要的作用,可以通过它们来提升用户界面的美观性和直观性。
Java提供了处理图标和图片的功能和类库,开发人员可以使用这些功能来加载、处理和显示各种图标和图片。
四、使用合适的颜色和字体颜色和字体也是GUI设计中非常重要的元素,可以用来强调界面的重要信息或者创建特定的视觉效果。
Java提供了各种颜色和字体的类库和功能,可以用来选择合适的颜色和字体样式。
五、增加交互性一个好的用户界面应该具有良好的交互性,能够方便用户进行操作。
Java提供了丰富的事件处理机制和监听器,可以实现交互性功能。
开发人员可以通过监听用户的操作,及时响应并更新界面,实现更好的用户体验。
六、进行界面美化除了以上的基本设计原则,开发人员还可以通过一些额外的技巧来进一步美化用户界面。
比如使用渐变色背景、添加阴影效果、使用动画效果等。
这些技巧可以使界面更加生动、有趣,并提升用户的整体体验。
java swing常用的9种组件
在Java1.0中,已经有一个用于GUI编程的类库AWT(Abstract Window Toolkit),称之为抽象窗口工具箱。
遗憾的是,AWT中的组件(例如按钮,类名为Button)在实现中使用了本地代码(Native Code),这些组件的创建和行为是由应用程序所在平台上的本地GUI工具来处理的。
因此,AWT组件要在不同的平台上提供给用户一致的行为就受到了很大的限制。
同时,AWT组件中还存在很多bug,这就使得使用AWT来开发跨平台的GUI应用程序困难重重。
1996年,SUN公司和Netsacpe公司在一个称为Swing的项目中合作完善了Netsacpe公司原来开发的一套GUI库,也就是现在所谓的Swing组件。
Swing组件和原来的AWT组件完全不同,最大的区别就是Swing组件的实现中没有使用本地代码,这样对底层平台的依赖型就大为降低,并且可以给不同平台的用户一致的感觉。
此外,和原来的AWT相比,Swing 中提供了内容更多、使用更为方便的组件。
在阅读一些书籍时,常会遇到名词JFC(Java Foundation Class)。
JFC的概念是在1997年的JavaOne开发者大会上首次提出的,是指用于构建GUI的一组API。
实际上,Swing只是JFC的一部分,其它的还有二维图形(Java 2D)API以及拖放(Drag and Drop)API等等。
Swing并不是完全取代了AWT,Swing只是使用更好的GUI组件(如JButton)代替AWT 中相应的GUI组件(如Button),并且增加了一些AWT中原来所没有的GUI组件。
并且,Swing 仍使用AWT 1.1的事件处理模型。
虽然现在AWT组件仍得到支持,但是建议在你的应用程序中尽量使用Swing组件和1.1的事件模型。
1.标签(JLabel)标签(JLabel)通常是用来标识另外一个组件的含义。
以在标签上显示文字、图象或是文字图象的组合。
java食堂点餐程序代码小票
Java食堂点餐程序代码小票一、介绍现代生活节奏加快,很多人都习惯在食堂用餐。
为了提高点餐过程的效率和准确性,开发一个Java食堂点餐程序是一项非常有意义的任务。
本文将详细探讨如何编写一个可以生成小票的Java食堂点餐程序代码。
二、功能需求分析在编写代码之前,先明确需要实现的功能需求。
根据任务名称,我们需要编写的食堂点餐程序代码应具备以下功能:1.显示菜单:将食堂提供的菜单信息显示出来,包括菜品名称、价格和编号。
2.点餐:顾客可以根据菜单编号选择菜品,并输入数量。
3.计算价格:根据顾客的点餐信息,计算总价格。
4.生成小票:将点餐信息和总价格生成打印小票。
三、程序设计与实现3.1 数据结构设计在食堂点餐程序中,我们可以使用以下数据结构来存储菜单信息和点餐信息:3.1.1 菜单信息public class MenuItem {private int id;private String name;private double price;// 省略构造方法和getter、setter}3.1.2 点餐信息public class OrderItem {private MenuItem menuItem;private int quantity;// 省略构造方法和getter、setter}3.2 功能实现3.2.1 显示菜单public class Menu {private List<MenuItem> menuItems;// 省略构造方法和getter、setterpublic void displayMenu() {System.out.println("菜单:");for (MenuItem item : menuItems) {System.out.println(item.getId() + ". " + item.getName() + "(¥" + item.getPrice() + ")");}}}3.2.2 点餐import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Order {private List<OrderItem> orderItems;// 省略构造方法和getter、setterpublic void addOrderItem(MenuItem menuItem, int quantity) {OrderItem orderItem = new OrderItem(menuItem, quantity);orderItems.add(orderItem);}public void placeOrder(Menu menu) {Scanner scanner = new Scanner(System.in);int choice;int quantity;while (true) {menu.displayMenu();System.out.println("请输入菜品编号(输入0结束点餐):");choice = scanner.nextInt();if (choice == 0) {break;}if (choice > menu.getMenuItems().size() || choice < 0) {System.out.println("无效的菜品编号,请重新输入!");continue;}System.out.println("请输入菜品数量:");quantity = scanner.nextInt();if (quantity <= 0) {System.out.println("无效的菜品数量,请重新输入!");continue;}MenuItem menuItem = menu.getMenuItems().get(choice - 1);addOrderItem(menuItem, quantity);}}}3.2.3 计算价格public class Calculator {public static double calculateTotalPrice(List<OrderItem> orderItems) { double totalPrice = 0;for (OrderItem orderItem : orderItems) {MenuItem menuItem = orderItem.getMenuItem();int quantity = orderItem.getQuantity();totalPrice += menuItem.getPrice() * quantity;}return totalPrice;}}3.2.4 生成小票public class Receipt {public static void generateReceipt(List<OrderItem> orderItems) {System.out.println("小票:");System.out.println("菜品\t\t数量\t\t价格");for (OrderItem orderItem : orderItems) {MenuItem menuItem = orderItem.getMenuItem();int quantity = orderItem.getQuantity();System.out.println(menuItem.getName() + "\t\t" + quantity + "\t\t ¥" + (menuItem.getPrice() * quantity));}System.out.println("总计:¥" + Calculator.calculateTotalPrice(orderIt ems));System.out.println("谢谢惠顾!");}}3.3 主程序入口public class Main {public static void main(String[] args) {Menu menu = new Menu();// 初始化菜单,添加菜品信息到menu对象Order order = new Order();order.placeOrder(menu);List<OrderItem> orderItems = order.getOrderItems();Receipt.generateReceipt(orderItems);}}四、示例运行结果以下是一个示例运行结果的截图:菜单:1. 麻辣香锅(¥28.0)2. 宫保鸡丁(¥18.0)3. 水煮鱼(¥30.0)请输入菜品编号(输入0结束点餐):2请输入菜品数量:2菜单:1. 麻辣香锅(¥28.0)2. 宫保鸡丁(¥18.0)3. 水煮鱼(¥30.0)请输入菜品编号(输入0结束点餐):1请输入菜品数量:1菜单:1. 麻辣香锅(¥28.0)2. 宫保鸡丁(¥18.0)3. 水煮鱼(¥30.0)请输入菜品编号(输入0结束点餐):0小票:菜品数量价格宫保鸡丁 2 ¥36.0麻辣香锅 1 ¥28.0总计:¥64.0谢谢惠顾!五、总结通过本文对Java食堂点餐程序代码小票的详细探讨,我们了解了如何编写一个功能完备的Java食堂点餐程序。
java JTextArea 实现不可修改文本内容、右键菜单
最近在写聊天室...显示的文本框内容应该是不可以修改只能复制,但是JFC没有提供那种是否只可读的属性。
我从网上有看到有人写好了这种类,然后自己又添加了右键菜单出现复制、粘贴、剪切的功能摘自/mq612的源代码:import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.Transferable;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.JFrame;import javax.swing.JMenuItem;import javax.swing.JPopupMenu;import javax.swing.JScrollPane;import javax.swing.JT extArea;import javax.swing.KeyStroke;import javax.swing.UIManager;/*** Java右键菜单实现文本组件内容的的复制、粘贴、剪切功能** @author 五斗米<如转载请保留作者和出处>* @blog/mq612*/public class Test extends JFrame {private static final long serialVersionUID = -5942087991012920147L;private JScrollPane pane = null;private TextAreaMenu text = null;public Test() {super("右键菜单");try { // 使用Windows的界面风格UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");} catch (Exception e) {e.printStackTrace();}text = new TextAreaMenu();pane = new JScrollPane(text);this.getContentPane().add(pane);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setSize(300, 200);this.setVisible(true);}public static void main(String args[]) {new Test();}/*** 带有功能菜单的JT extArea** @author 五斗米<如转载请保留作者和出处>* @blog/mq612*/class TextAreaMenu extends JTextArea implements MouseListener { private static final long serialVersionUID = -2308615404205560110L;private JPopupMenu pop = null; // 弹出菜单private JMenuItem copy = null, paste = null, cut = null; // 三个功能菜单public TextAreaMenu() {super();init();}private void init() {this.addMouseListener(this);pop = new JPopupMenu();pop.add(copy = new JMenuItem("复制"));pop.add(paste = new JMenuItem("粘贴"));pop.add(cut = new JMenuItem("剪切"));copy.setAccelerator(KeyStroke.getKeyStroke('C', InputEvent.CTRL_MASK)); paste.setAccelerator(KeyStroke.getKeyStroke('V', InputEvent.CTRL_MASK)); cut.setAccelerator(KeyStroke.getKeyStroke('X', InputEvent.CTRL_MASK)); copy.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {action(e);}});paste.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {action(e);}});cut.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {action(e);}});this.add(pop);}/*** 菜单动作* @param e*/public void action(ActionEvent e) {String str = e.getActionCommand();if (str.equals(copy.getText())) { // 复制this.copy();} else if (str.equals(paste.getText())) { // 粘贴this.paste();} else if (str.equals(cut.getText())) { // 剪切this.cut();}}public JPopupMenu getPop() {return pop;}public void setPop(JPopupMenu pop) {this.pop = pop;}/*** 剪切板中是否有文本数据可供粘贴** @return true为有文本数据*/public boolean isClipboardString() {boolean b = false;Clipboard clipboard = this.getToolkit().getSystemClipboard(); Transferable content = clipboard.getContents(this);try {if (content.getTransferData(DataFlavor.stringFlavor) instanceof String) {b = true;}} catch (Exception e) {}return b;}/*** 文本组件中是否具备复制的条件** @return true为具备*/public boolean isCanCopy() {boolean b = false;int start = this.getSelectionStart();int end = this.getSelectionEnd();if (start != end)b = true;return b;}public void mouseClicked(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mousePressed(MouseEvent e) {if (e.getButton() == MouseEvent.BUTTON3) { copy.setEnabled(isCanCopy());paste.setEnabled(isClipboardString());cut.setEnabled(isCanCopy());pop.show(this, e.getX(), e.getY());}}public void mouseReleased(MouseEvent e) {}}}我修改后可实现右键单击菜单、只可复制不可修改的代码public class NoEditArea extends JT extArea implements MouseListener{//以下代码实现右键复制功能private static final long serialVersionUID = -2308615404205560110L;private JPopupMenu pop = null; // 弹出菜单private JMenuItem copy = null, paste = null, cut = null; // 三个功能菜单private void init() {this.addMouseListener(this);pop = new JPopupMenu();pop.add(copy = new JMenuItem("复制"));copy.setAccelerator(KeyStroke.getKeyStroke('C', InputEvent.CTRL_MASK)); copy.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {action(e);}});this.add(pop);}public void action(ActionEvent e) {String str = e.getActionCommand();if (str.equals(copy.getT ext())) { // 复制this.copy();}}public JPopupMenu getPop() {return pop;}public void setPop(JPopupMenu pop) { this.pop = pop;}//文本组件是否具备复制的条件public boolean isCanCopy() {boolean b = false;int start = this.getSelectionStart();int end = this.getSelectionEnd();if (start != end)b = true;return b;}public void mouseClicked(MouseEvent e) {}public void mouseEntered(MouseEvent e) { }public void mouseExited(MouseEvent e) {}public void mousePressed(MouseEvent e) {if (e.getButton() == MouseEvent.BUTTON3) {copy.setEnabled(isCanCopy());pop.show(this, e.getX(), e.getY());}}public void mouseReleased(MouseEvent e) {}//以下代码实现不可修改文本框内容public NoEditArea(/*String string,int rows,int columns*/){super(/*string,rows,columns*/);init();addKeyListener(new KeyAdapter(){public void keyTyped(KeyEvent key) {key.consume();}public void keyPressed(KeyEvent key) {JTextArea temp = (JTextArea)key.getSource();int caretPos = temp.getCaretPosition();switch(key.getKeyCode()){case(KeyEvent.VK_LEFT):case(KeyEvent.VK_BACK_SPACE):if(caretPos>0){temp.setCaretPosition(caretPos -1);}break;case(KeyEvent.VK_RIGHT):if(caretPos<temp.getText().length()){ temp.setCaretPosition( caretPos+1);}break;case(KeyEvent.VK_DELETE):System.out.println("aaa");break;default:break;}key.consume();}public void keyReleased(KeyEvent key) {key.consume();}});}}NoEditArea已经封装好,直接用就可以了如果是普通的JTextArea,实现右键复制、粘贴、剪贴功能public class EditArea extends JTextArea implements MouseListener{public EditArea(){super();init();}// 以下代码实现右键复制功能private static final long serialVersionUID = -2308615404205560110L;private JPopupMenu pop = null; // 弹出菜单private JMenuItem copy = null, paste = null, cut = null; // 三个功能菜单private void init() {this.addMouseListener(this);pop = new JPopupMenu();pop.add(copy = new JMenuItem("复制"));pop.add(paste = new JMenuItem("粘贴"));pop.add(cut = new JMenuItem("剪切"));copy.setAccelerator(KeyStroke.getKeyStroke('C', InputEvent.CTRL_MASK)); paste.setAccelerator(KeyStroke.getKeyStroke('V', InputEvent.CTRL_MASK)); cut.setAccelerator(KeyStroke.getKeyStroke('X', InputEvent.CTRL_MASK)); copy.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {action(e);}});paste.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {action(e);}});cut.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {action(e);}});this.add(pop);public void action(ActionEvent e) {String str = e.getActionCommand();if (str.equals(copy.getT ext())) { // 复制this.copy();} else if (str.equals(paste.getText())) { // 粘贴this.paste();} else if (str.equals(cut.getText())) { // 剪切this.cut();}}public JPopupMenu getPop() {return pop;}public void setPop(JPopupMenu pop) {this.pop = pop;}//是否具备粘贴的条件public boolean isClipboardString() {boolean b = false;Clipboard clipboard = this.getT oolkit().getSystemClipboard(); Transferable content = clipboard.getContents(this);try {if (content.getTransferData(DataFlavor.stringFlavor) instanceof String) {b = true;}}catch(Exception e){return b;}//文本组件是否具备复制的条件public boolean isCanCopy() {boolean b = false;int start = this.getSelectionStart();int end = this.getSelectionEnd();if (start != end)b = true;return b;}public void mouseClicked(MouseEvent e) {}public void mouseEntered(MouseEvent e) { }public void mouseExited(MouseEvent e) { }public void mousePressed(MouseEvent e) {if (e.getButton() == MouseEvent.BUTTON3) { copy.setEnabled(isCanCopy());paste.setEnabled(isClipboardString());cut.setEnabled(isCanCopy());pop.show(this, e.getX(), e.getY());}}public void mouseReleased(MouseEvent e) {}。
java递归实现构造无限层级树形菜单
java递归实现构造⽆限层级树形菜单这⾥来讲⼀下后台java如何构造多叉树,这样前台就可接收到数据递归构造树形菜单了。
我们来理⼀下如何实现构造多叉树的逻辑吧,其实整个问题概括起来就是1、构造⼀个实体类,⽤来存储节点,所以我们构造的需要四个对象(id,pid,name,和chirenList)2、构造菜单结构3、构造⼦菜单,如此循环,通过pid判断上级菜单具体实现:1、这⾥构造Tree.java实体类12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41package com.tcl.jr.crm.entity;/*** 类名称:Tree* 类描述:树形结构*/public class Tree {private String id;private String pId;private String name;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getpId() {return pId;}public void setpId(String pId) {this.pId = pId;}public String getName() {return name;}public void setName(String name) { = name;}@Overridepublic String toString() {return"Tree [id="+ id + ", pId="+ pId + ", name="+ name + "]"; }}2、封装树形结构类,这⾥我封装成⼀个通⽤的⼯具类,⽅便项⽬中使⽤,MenuTreeUtil.java,完整代码如下,可直接复制使⽤:1234 5 6 7 8 9package com.tcl.jr.crm.util;import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List;import java.util.Map;9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50import java.util.Map;import com.tcl.jr.crm.entity.Tree;/*** 类名称:MenuTreeUtil* 类描述:递归构造树型结构*/public class MenuTreeUtil {public static Map<String,Object> mapArray = new LinkedHashMap<String, Object>(); public List<Tree> menuCommon;public List<Object> list = new ArrayList<Object>();public List<Object> menuList(List<Tree> menu){this.menuCommon = menu;for(Tree x : menu) {Map<String,Object> mapArr = new LinkedHashMap<String, Object>();if(x.getpId()=="0"){mapArr.put("id", x.getId());mapArr.put("name", x.getName());mapArr.put("pid", x.getpId());mapArr.put("childList", menuChild(x.getId()));list.add(mapArr);}}return list;}public List<?> menuChild(String id){List<Object> lists = new ArrayList<Object>();for(Tree a:menuCommon){Map<String,Object> childArray = new LinkedHashMap<String, Object>();if(a.getpId() == id){childArray.put("id", a.getId());childArray.put("name", a.getName());childArray.put("pid", a.getpId());childArray.put("childList", menuChild(a.getId()));lists.add(childArray);}}return lists;}}3、最后在控制台请求⽅法调⽤数据就⾏了,在controller的⽅法如下:12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20/*** 显⽰APP树形结构*/@RequestMapping(value = { "getAPPTree"}, produces = "text/html;charset=UTF-8")@ResponseBodypublic String getAPPTree(HttpServletRequest request, HttpServletResponse response) throws Exception {Map<String, Object> returnmap = new HashMap<>();MenuTreeUtil menuTree = new MenuTreeUtil();PageData pd = this.getPageData();try{//这⾥的⽅法是根据前台的机构类型代码来查找数据库数据的,这⾥不多加解释,因⼈⽽异List<Tree> list = dataDicService.buildTree(pd.getString("instType"));List<Object> menuList = menuTree.menuList(list);//区别于web端,这边APP端list不能转为json格式,直接将list传给前台,转成json对象的话vuejs前台⽆法识别渲染 returnmap.put("list", menuList);} catch(Exception e) {logger.error(e.getMessage());}return JsonMapper.toJsonString(returnmap);}4、然后前台ajax调⽤第三部的接⼝⽅法就⽽已请求到所需的数据,如何渲染成好的前台页⾯,参照我另⼀篇⽂章:vuejs使⽤递归组件实现树形⽬录java构造树形菜单数据就说到这⾥啦,希望对⼤家有帮助,我的分享⼀般都是特别详细的,除了涉及项⽬隐私之外,是不会对⼤家有所保留的哟,也希望⼤家多多⽀持脚本之家。
java食堂点餐程序代码小票
java食堂点餐程序代码小票一、背景介绍随着互联网的发展,越来越多的人选择在网上点餐,但是传统的餐厅点餐方式仍然存在。
为了方便顾客点餐和管理订单,很多餐厅都会开发自己的点餐程序。
本文将介绍一款基于Java语言开发的食堂点餐程序代码,并提供小票样例。
二、程序功能1. 登录功能:用户可以通过输入用户名和密码登录系统。
2. 点菜功能:用户可以选择菜品并添加到购物车中。
3. 结算功能:用户可以查看购物车中的菜品并进行结算。
4. 订单管理功能:管理员可以查看所有订单信息并进行管理操作。
三、程序架构1. 前端界面:使用Java Swing框架实现前端界面。
2. 后端逻辑:使用Java语言编写后端逻辑代码,并通过MySQL数据库存储数据。
3. 程序流程:(1)用户登录系统;(2)用户选择菜品并添加到购物车中;(3)用户结算购物车中的菜品;(4)系统生成小票。
四、程序代码以下是Java食堂点餐程序代码:1. 登录界面代码```public class LoginFrame extends JFrame {private JTextField userField;private JPasswordField passwordField;private JButton loginButton;public LoginFrame() {setTitle("登录");setSize(300, 200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JPanel panel = new JPanel();panel.setLayout(new GridLayout(3, 2));panel.add(new JLabel("用户名:"));userField = new JTextField();panel.add(userField);panel.add(new JLabel("密码:"));passwordField = new JPasswordField();panel.add(passwordField);loginButton = new JButton("登录");loginButton.addActionListener(new ActionListener() { @Overridepublic void actionPerformed(ActionEvent e) {// 处理登录逻辑}});panel.add(loginButton);setContentPane(panel);}}```2. 菜单界面代码```public class MenuFrame extends JFrame {private JTable menuTable;private JButton addButton;private JButton removeButton;private JButton checkoutButton;public MenuFrame() {setTitle("菜单");setSize(400, 300);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);String[] columnNames = {"名称", "价格"};Object[][] rowData = {{"鱼香肉丝", "20"}, {"宫保鸡丁", "18"}, {"糖醋排骨", "22"}};menuTable = new JTable(rowData, columnNames);JScrollPane scrollPane = new JScrollPane(menuTable);add(scrollPane);addButton = new JButton("添加到购物车");addButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 处理添加到购物车逻辑}});add(addButton);removeButton = new JButton("从购物车中删除");removeButton.addActionListener(new ActionListener() { @Overridepublic void actionPerformed(ActionEvent e) {// 处理从购物车中删除逻辑}});add(removeButton);checkoutButton = new JButton("结算");checkoutButton.addActionListener(new ActionListener() { @Overridepublic void actionPerformed(ActionEvent e) {// 处理结算逻辑}add(checkoutButton);setLayout(new FlowLayout());}}```3. 购物车界面代码```public class CartFrame extends JFrame {private JTable cartTable;private JButton checkoutButton;public CartFrame() {setTitle("购物车");setSize(400, 300);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);String[] columnNames = {"名称", "价格"};Object[][] rowData = {{"鱼香肉丝", "20"}, {"宫保鸡丁", "18"}, {"糖醋排骨", "22"}};cartTable = new JTable(rowData, columnNames);JScrollPane scrollPane = new JScrollPane(cartTable);add(scrollPane);checkoutButton = new JButton("结算");checkoutButton.addActionListener(new ActionListener() { @Overridepublic void actionPerformed(ActionEvent e) {// 处理结算逻辑}});add(checkoutButton);setLayout(new FlowLayout());}}```4. 订单管理界面代码```public class OrderManagementFrame extends JFrame {private JTable orderTable;private JButton deleteButton;public OrderManagementFrame() {setTitle("订单管理");setSize(400, 300);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);String[] columnNames = {"订单号", "总价"};Object[][] rowData = {{"1001", "60"}, {"1002", "40"}, {"1003", "80"}};orderTable = new JTable(rowData, columnNames);JScrollPane scrollPane = new JScrollPane(orderTable);add(scrollPane);deleteButton = new JButton("删除订单");deleteButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 处理删除订单逻辑}});add(deleteButton);setLayout(new FlowLayout());}}```五、小票样例以下是Java食堂点餐程序生成的小票样例:```========================= 欢迎光临食堂点餐-------------------------名称数量价格鱼香肉丝 2 40宫保鸡丁 1 18-------------------------总价: 58=========================```六、总结本文介绍了一款基于Java语言开发的食堂点餐程序代码,并提供了小票样例。
Java中的GUI编程
集成Web技术:Java GUI编程将与Web技术更加紧密地集成,使得开发者能够更加方便地 开发出功能丰富、界面美观的Web应用程序。
增强安全性:Java GUI编程将更加注重安全性,提供更多的安全特性和工具,帮助开发者 构建更加安全的应用程序。
AWT组件使用示例
组件类型:按钮、标
签、文本框、选择框 等
组件属性:颜色、字 体、大小、位置等
组件事件:点击事件
、键盘事件、鼠标事 件等
组件布局:流式布局 、网格布局、边界布 局等
JavaFX组件库
JavaFX组件库简介
标题
JavaFX组件库是Java中用于构建GUI界面的工具包
标题
提供了丰富的UI控件,如按钮、文本框、列表等
BorderPane:分为 五个区域,可以设置 子节点的位置和比例 ,适合布局复杂的界
面
GridPane:按照网格 布局,可以设置行、列 、跨度等属性,适合布 局规则、整齐的界面
06
HBox和VBox:分别 按照水平或垂直方向 排列子节点,可以设 置对齐方式、间距等
07
JavaFX布局管理器的 使用方法:通过设置组 件的布局管理器属性, 可以轻松实现界面布局
。
JavaFX事件处理机制
事件源: JavaFX组件库 中的UI组件
事件类型:包 括鼠标事件、 键盘事件、触 摸事件等
事件处理:通 过注册监听器 来实现事件处 理
监听器类型: 包括事件监听 器、动作监听 器、选择监听 器等
事件传播:事 件从源组件传 播到父组件, 直到到达根节 点
Java 菜单按钮控制绘图程序
目录一、程序开发背景 (1)二、程序分析与设计 (1)(一)程序功能要求 (1)(二)程序模块结构设计 (1)1、程序流程 (1)2、模块化功能结构分析 (2)三、程序的设计与实现 (3)(一)图形界面 (3)(二)图形界面的实现 (3)四、系统测试 (4)五、总结 (10)六、附件(程序代码) (11)菜单按钮控制绘图程序一、程序开发背景进一步巩固Java课程中关于图形用户界面具体实现的知识,使用Eclipse开发平台来实现“菜单按钮控制绘图”课题。
二、程序分析与设计为了复习和巩固Java程序设计基础,和进一步理解和掌握Java 语言,学生要用Java语言设计一个完整的应用程序,使学生综合应用所学知识完成软件的分析、设计、调试和总结,可加深和巩固对理论教学和实验教学内容的掌握,使学生进一步掌握使用面向对象技术开发完整系统的方法。
(一)程序功能要求功能要求:实现简单绘图功能,具体要求:画直线,画空心或实心椭圆、画空心或实心矩形、画多边形(图形的位置和大小可在程序中设定)。
(二)程序模块结构设计1、程序流程用菜单和按钮控制绘图流程如图一所示图一菜单和按钮控制绘图流程图绘制图形:(1)直线(2)空心椭圆(3)实心椭圆(4)空心矩形(5)实心矩形(6)多边形2、模块化功能结构分析设计程序功能模块如图二所示用菜单和按钮控制绘图程序菜按单钮绘绘制制图图形形图二功能模块图菜单绘制图形要求:主菜单:直线、椭圆、矩形、多边形菜单项:(1)直线:直线(2)椭圆:实心椭圆、空心椭圆(3)矩形:实心矩形、空心矩形(4)多边形:多边形按钮项:直线、空心椭圆、实心椭圆、空心矩形,实心矩形、多边形三、程序的设计与实现(一)图形界面图形界面用于显示绘制的图形,界面主要包括4 个上标签、6个下标签和图形显示区域,其中上标签“椭圆”包含“实心椭圆”、“空心椭圆”两个子标签,“矩形”中又包含“实心矩形”,“空心矩形”两个子按钮。
(二)图形界面的实现图形界面的具体实现import java.awt.*;import java.awt.event.*;import javax.swing.*;以上代码用于导入以下程序所用到的包。
java Swing (check,对话框,单选钮,复选框)
本课目标
单选框 复选框 列表 下拉列表 Data Check 利用对话框与用户交互 高级布局
JList列表框
JComboBox下拉列表
Swing的JComboBox(下拉列表框)组件用来实现在下拉显示的一组列 表选项中进行选择的功能 JList类允许用ComboBoxModel,Array,Vector来构造一个列表 构造函数如下:
JComboBox() JComboBox(ComboBox Model dataModel):用ComboBoxModel构造一个下拉列表 JComboBox(Object[] dataArray):用Array构造一个下拉列表 JComboBox(Vector dataVector) :用Vector构造一个下拉列表
界面窗口验证程序代码验证数据库存储时验证999为什么需要datacheck?维护程序数据的正确性?有利于程序界面的有好可操作性强?尽早发现层序数据的错误提高效率swing中我们可以完成界面datacheck用对话框与用户进行交互jdialog与joptionpane?jdialog与joptionpane都是弹出式对话框都可以完成与用户交互的任务?jdialog使用起来比较繁琐需要用户自己定义对话框的细节但是在完成复杂的对话框设计时jdialog很有优势?joptionpane使用起来相当方便系统已经为用户定义好对话框的细节用户只需指定使用即可?我们在做datacheck时一般使用joptionpanejoptionpane可用于显示各种图标如用于警告消息问题错误和信息等的图标对话框的显示方式?模式对话框9强制用户必需处理对话框的内容否则用户无法进行其他操作对话框与其他应用界面的执行是有先后顺序的?非模式对话框9不强制用户处理对话框的内容用户可以进行其他操作对话框与其他应用界面的执行是无先后顺序的错误对话框joptionpaneshowmessagedialogthis学生编号不能为空
学习使用Java编写简单的桌面应用程序
学习使用Java编写简单的桌面应用程序随着计算机技术的发展,Java成为了一种非常流行的编程语言。
使用Java编写桌面应用程序可以让我们实现更丰富多样的功能。
下面将详细介绍学习使用Java 编写简单的桌面应用程序的步骤。
1. 确定开发环境:首先,我们需要选择一种适合Java开发的集成开发环境(IDE)。
目前比较流行的IDE有Eclipse、IntelliJ IDEA等。
选择合适的IDE可以提高我们的开发效率。
2. 学习Java基础知识:在开始编写桌面应用程序之前,我们需要掌握Java的基础知识。
包括语法、数据类型、循环、条件语句等。
可以通过学习Java教程、参加培训课程等方式来提升自己的Java编程能力。
3. 学习Swing或JavaFX:Swing和JavaFX是Java的桌面应用程序开发框架,可以帮助我们快速地创建GUI界面。
对于初学者而言,可以选择学习Swing作为入门。
可以通过阅读相关的教程、学习示例代码等方式来了解Swing或JavaFX的基本使用方法。
4. 设计应用程序界面:在编写桌面应用程序之前,我们需要先进行应用程序界面的设计。
可以采用工具软件设计界面,例如Adobe XD、Sketch等。
设计应用程序界面时需要考虑用户的使用习惯,界面的布局和颜色搭配等因素。
5. 编写应用程序代码:根据应用程序的需求,我们可以开始编写应用程序的代码。
首先,创建一个Java类,作为应用程序的入口。
然后,使用Swing或JavaFX 提供的组件,如按钮、文本框等,将界面元素逐一添加到应用程序中。
同时,编写相应的事件处理方法,使程序可以响应用户的交互。
6. 调试和测试:在编写完应用程序的代码后,我们可以进行调试和测试。
通过调试器可以逐步查看代码的执行过程,找出可能存在的问题并进行修复。
同时,也可以编写一些测试用例来验证程序的正确性和稳定性。
7. 打包和发布:在完成调试和测试后,我们可以将应用程序打包成可执行文件,并发布给用户使用。
java常用快捷键
java常用快捷键java常用快捷键Java是一门面对对象的编程语言,不仅汲取了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简洁易用两个特征。
以下是我整理的java常用快捷键,盼望能够关心到大家。
java常用快捷键1Eclipse中有如下一些和编辑相关的快捷键。
编辑快捷键1. 【ALT+/】此快捷键为用户编辑的好帮手,能为用户供应内容的帮助,不要为记不全方法和属性名称犯愁,当记不全类、方法和属性的名字时,多体验一下【ALT+/】快捷键带来的好处吧。
2. 【Ctrl+O】显示类中方法和属性的大纲,能快速定位类的方法和属性,在查找Bug时特别有用。
3. 【Ctrl+/】快速添加解释,能为光标所在行或所选定行快速添加解释或取消解释,在调试的时候可能总会需要解释一些东西或取消解释,现在好了,不需要每行进行重复的解释。
4. 【Ctrl+D】删除当前行,这也是笔者的最爱之一,不用为删除一行而按那么多次的删除键。
5. 【Ctrl+M】窗口最大化和还原,用户在窗口中进行操作时,总会觉得当前窗口小(尤其在编写代码时),现在好了,试试【Ctrl+M】快捷键。
查看和定位快捷键在程序中,快速定位代码的位置,快速找到Bug的所在,是特别不简单的事,Eclipse供应了强大的查找功能,可以利用如下的快捷键关心完成查找定位的工作。
1. 【Ctrl+K】、【Ctrl++Shift+K】快速向下和向上查找选定的内容,从今不再需要用鼠标单击查找对话框了。
2. 【Ctrl+Shift+T】查找工作空间(Workspace)构建路径中的可找到Java类文件,不要为找不到类而苦痛,而且可以使用“*”、“?”等通配符。
3. 【Ctrl+Shift+R】和【Ctrl+Shift+T】对应,查找工作空间(Workspace)中的全部文件(包括Java文件),也可以使用通配符。
4. 【Ctrl+Shift+G】查找类、方法和属性的引用。
java 弹出菜单事件
java 弹出菜单事件
在编写图形界面时,人们往往希望直接在窗口上单击鼠标右键,就可以显示弹出菜单。
通过弹出的上下文菜单,直接进行相关操作。
实现弹出菜单,需要通过鼠标事件MouseEvent和单击事件ActionEvent实现。
这两个事件在前面都已经介绍过,这里就不再重复介绍。
弹出菜单操作中,鼠标事件的事件源通常为窗口和文本框组件等,ActionEvent事件的事件源通常为菜单项。
下面创建一个案例,来说明弹出菜单事件的使用。
代码如下所示:
执行上述代码中,当右击鼠标时,会弹出快捷菜单。
选择不同的颜色会修改窗体的背景颜色,如图10-16所示。
图10-16 弹出菜单事件。
Java 弹出式菜单
JMenuItem exit = new JMenuItem("退出");
jPopupMenuOne.add(exit);//将exit添加到jPopupMenuOne中
//创建监听器对象
MouseListener popupListener = new PopupListener(jPopupMenuOne);
JPopupMenu popupMenu;
PopupListener(JPopupMenu popupMenu) {
this.popupMenu = popupMenu;
}
public void mousePressed(MouseEvent e) {
showPopupMenu(e);
}
public void mouseReleased(MouseEvent e) {
Java
JPopupMenu是一种越来越常见的菜单。与其他形式菜单不同的是,它并不固定在菜单栏中,而是能够自由浮动。
与JMenu一样,开发人员可以使用add方法和insert方法向JPopupMenu中添加或者插入JMenuItem与JComponent。JPopupMenu对添加到其中的每一个菜单项都赋予一个整数索引,并根据弹出式菜单的布局管理器调整菜单项显示的顺序。此外,还可以使用addSeparator( )方法添加分隔线。
jPopupMenuOne.add(fileMenu);//将copyFile添加到jPopupMenuOne中
jPopupMenuOne.addSeparator();//添加分割符
jPopupMenuOne.add(fileMenu2);
JAVA:简单添加菜单界面(swing)
JAVA:简单添加菜单界⾯(swing) 1package com.le.menu;23import java.awt.Color;4import java.awt.Container;5import java.awt.FlowLayout;6import java.awt.GridLayout;7import java.awt.event.ActionEvent;8import java.awt.event.ActionListener;9import java.awt.event.ItemEvent;10import java.awt.event.ItemListener;11import java.awt.event.KeyEvent;1213import javax.swing.JFrame;14import javax.swing.JLabel;15import javax.swing.JMenu;16import javax.swing.JMenuBar;17import javax.swing.JMenuItem;18import javax.swing.JPanel;19import javax.swing.JRadioButtonMenuItem;2021public class MenuManagerShow {22private MenuManagerShow() {23 init();24 }2526public static void main(String[] args) {27 MenuManagerShow menuManager = new MenuManagerShow();28 menuManager.show();29 }3031private void show() {3233 }3435class MenuItemListener implements ActionListener {36 @Override37public void actionPerformed(ActionEvent e) {38 statusLabel.setText("JMenu Item clicked:" + e.getActionCommand() + ".");39 }40 }4142/**43 * 给主窗⼝设置背景⾊44 *45 * @param mainFrame46 * 主窗⼝47 * @see分析:JFrame默认使⽤流式布局管理器(FlowLayout)将整个窗体进⾏覆盖操作,<br>48 * 设置的颜⾊被布局管理器给覆盖住了,所以⽆法看见。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序中实现菜单需要用到3个组件:JMenuBar、JMenuItem和JMenu。
菜单条组件JMenuBar组件的功能是用来摆入JMenu组件。
当建立了许多JMenu组件后,通过JMenuBar组件可将JMenu组件加入到窗口中。
JMenuBar组件对于构造一个菜单来说是个不可缺少的组件,其构造方法如下:JMenuBar(); //建立一个新的JMenuBar图6.19 菜单组件的继承结构图通过add()方法可以向JMenuBar组件中添加菜单。
JMenuBar不支持事件监听器,在JMenuBar上产生的所有事件都会被JMenuBar组件自动处理。
JFrame提供setJMenuBar()方法将JMenuBar组件放置在窗口上方,setJMenuBar()方法声明如下:public void setJMenuBar(JMenuBar menubar);菜单组件JMenu组件是用来存放和整合JMenuItem的组件,它是构成一个菜单中不可或缺的组件之一。
JMenu可以是单一层次的结构也可以是一个层次式的结构,要使用什么结构取决于界面在设计上的需要。
其构造方法如下所示:JMenu(); //建立一个JMenuJMenu(Action a); //建立一个支持Action的JMenuJMenu(String s); //以指定的字符串名称建立一个JMenuJMenu(String, Boolean b); //以指定的字符串名称建立一个JMenu并决定这个菜单是否具有下拉式的属性菜单项组件JMenuItem继承自AbstractButton类,因此JMenuItem具有许多AbstractButton的特性,和功能,例如加入图标文件或是当在菜单中选择某一项JMenuItem时就如同按下按钮触发ActionEvent,通过对ActionEvent的处理就可以针对不同的JMenuItem编写其对应的程序代码。
JMenuItem的构造方法如下所示:JMenuItem(); //建立一个JMenuItemJMenuItem(Action a); //建立一个支持Action的JMenuItemJMenuItem(Icon icon); //建立一个有图标的JMenuItemJMenuItem(String text); //建立一个有文字的JMenuItemJMenuItem(String text, Icon icon); //建立一个有图标和文字的JMenuItemJMenuItem(String text, int mnemonic);//建立一个有文字和键盘快捷键的JMenuItem还可以创建带有复选框或选择按钮的菜单项,即创建JCheckBoxMenuItem、JRaionButtonMenuItem组件。
从这两个组件的继承关系可以看出它们可以使用JMenuItem所提供的方法,又具有JCheckBox和JRadionButton的特性。
例6.26 使用菜单的实例import java.awt.*;import java.awt.event.*;import javax.swing.*;public class MenuTest extends JFrame {private final Color colorV alues[] = { Color.black, Color.blue, Color.red, Color.green };private JRadioButtonMenuItem colorItems[], fonts[];private JCheckBoxMenuItem styleItems[];private JLabel displayLabel;private ButtonGroup fontGroup, colorGroup;private int style;public MenuTest(){super( "Using JMenus" );JMenu fileMenu = new JMenu( "File" );fileMenu.setMnemonic( 'F' ); //设置快捷键JMenuItem aboutItem = new JMenuItem( "About..." );aboutItem.setMnemonic( 'A' );fileMenu.add( aboutItem );aboutItem.addActionListener(new ActionListener() {public void actionPerformed( ActionEvent event ){JOptionPane.showMessageDialog( MenuTest.this,"This is an example\nof using menus","About", JOptionPane.PLAIN_MESSAGE );}});JMenuItem exitItem = new JMenuItem( "Exit" );exitItem.setMnemonic( 'x' );fileMenu.add( exitItem );exitItem.addActionListener(new ActionListener() {public void actionPerformed( ActionEvent event ){System.exit( 0 );}});JMenuBar bar = new JMenuBar();setJMenuBar( bar );bar.add( fileMenu );JMenu formatMenu = new JMenu( "Format" );formatMenu.setMnemonic( 'r' );String colors[] = { "Black", "Blue", "Red", "Green" };JMenu colorMenu = new JMenu( "Color" );colorMenu.setMnemonic( 'C' );colorItems = new JRadioButtonMenuItem[ colors.length ];colorGroup = new ButtonGroup();ItemHandler itemHandler = new ItemHandler();for ( int count = 0; count < colors.length; count++ ) {colorItems[ count ] = new JRadioButtonMenuItem( colors[ count ] );colorMenu.add( colorItems[ count ] );colorGroup.add( colorItems[ count ] );colorItems[ count ].addActionListener( itemHandler );}colorItems[ 0 ].setSelected( true );formatMenu.add( colorMenu );formatMenu.addSeparator(); //分隔线String fontNames[] = { "Serif", "Monospaced", "SansSerif" };JMenu fontMenu = new JMenu( "Font" );fontMenu.setMnemonic( 'n' );fonts = new JRadioButtonMenuItem[ fontNames.length ];fontGroup = new ButtonGroup();for ( int count = 0; count < fonts.length; count++ ) {fonts[ count ] = new JRadioButtonMenuItem( fontNames[ count ] );fontMenu.add( fonts[ count ] );fontGroup.add( fonts[ count ] );fonts[ count ].addActionListener( itemHandler );}fonts[ 0 ].setSelected( true );fontMenu.addSeparator();String styleNames[] = { "Bold", "Italic" };styleItems = new JCheckBoxMenuItem[ styleNames.length ]; StyleHandler styleHandler = new StyleHandler();for ( int count = 0; count < styleNames.length; count++ ) {styleItems[ count ] = new JCheckBoxMenuItem( styleNames[ count ] );fontMenu.add( styleItems[ count ] );styleItems[ count ].addItemListener( styleHandler );}formatMenu.add( fontMenu );bar.add( formatMenu );displayLabel = new JLabel( "Sample Text", SwingConstants.CENTER ); displayLabel.setForeground( colorV alues[ 0 ] );displayLabel.setFont( new Font( "Serif", Font.PLAIN, 72 ) ); getContentPane().setBackground( Color.CY AN );getContentPane().add( displayLabel, BorderLayout.CENTER );setSize( 500, 200 );setVisible( true );}public static void main( String args[] ){MenuTest application = new MenuTest();application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );}private class ItemHandler implements ActionListener {public void actionPerformed( ActionEvent event ){for ( int count = 0; count < colorItems.length; count++ )if ( colorItems[ count ].isSelected() ) {displayLabel.setForeground( colorV alues[ count ] );break;}for ( int count = 0; count < fonts.length; count++ )if ( event.getSource() == fonts[ count ] ) {displayLabel.setFont(new Font( fonts[ count ].getText(), style, 72 ) );break;}repaint();}}private class StyleHandler implements ItemListener {public void itemStateChanged( ItemEvent e ){style = 0;if ( styleItems[ 0 ].isSelected() )style += Font.BOLD;if ( styleItems[ 1 ].isSelected() )style += Font.ITALIC;displayLabel.setFont( new Font( displayLabel.getFont().getName(), style, 72 ) );repaint();}}}程序运行结果如下图所示:图6.20演示使用菜单的程序运行结果图弹出式菜单是一种特别形式的菜单,其性质与菜单几乎完全相同,只是PopupMenu并不固定在窗口的任何一个位置,而是根据鼠标位置由系统判断PopupMenu应出现在哪里。