Java模拟Windows开始菜单
javaswing制作一个登陆界面,亲测有效

javaswing制作⼀个登陆界⾯,亲测有效⼀、介绍Swing 是⼀个为Java设计的GUI⼯具包。
Swing是JAVA基础类的⼀部分。
Swing包括了图形⽤户界⾯(GUI)器件如:⽂本框,按钮,分隔窗格和表。
Swing提供许多⽐AWT更好的屏幕显⽰元素。
它们⽤纯Java写成,所以同Java本⾝⼀样可以跨平台运⾏,这⼀点不像AWT。
它们是JFC的⼀部分。
它们⽀持可更换的⾯板和主题(各种操作系统默认的特有主题),然⽽不是真的使⽤原⽣平台提供的设备,⽽是仅仅在表⾯上模仿它们。
这意味着你可以在任意平台上使⽤JAVA⽀持的任意⾯板。
轻量级组件的缺点则是执⾏速度较慢,优点就是可以在所有平台上采⽤统⼀的⾏为。
⼆、效果三、代码package com.test.jframe;import java.awt.Color;import java.awt.EventQueue;import bel;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFormattedTextField;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPasswordField;public class JFrameTest {private JFrame frame;private JPasswordField passwordField;private boolean isLogin = false;/*** Launch the application.*/public static void main(String[] args) {EventQueue.invokeLater(new Runnable() {public void run() {try {JFrameTest window = new JFrameTest();window.frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}/*** Create the application.*/public JFrameTest() {initialize();}/*** Initialize the contents of the frame.*/private void initialize() {String userName = "111";String userPwd = "111";frame = new JFrame();frame.setBounds(100, 100, 667, 453);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().setLayout(null);Label label = new Label("账号:");label.setAlignment(Label.CENTER);label.setBounds(116, 49, 50, 23);frame.getContentPane().add(label);Label label_1 = new Label("密码:");label_1.setAlignment(Label.CENTER);label_1.setBounds(116, 85, 50, 23);frame.getContentPane().add(label_1);Label label_2 = new Label("⽤户状态:");label_2.setBounds(433, 49, 60, 23);frame.getContentPane().add(label_2);Label label_3 = new Label("未登录");label_3.setForeground(new Color(255, 0, 0));label_3.setBounds(499, 49, 40, 23);frame.getContentPane().add(label_3);JFormattedTextField formattedTextField = new JFormattedTextField();formattedTextField.setBounds(172, 49, 166, 23);frame.getContentPane().add(formattedTextField);passwordField = new JPasswordField();passwordField.setBounds(172, 85, 166, 23);frame.getContentPane().add(passwordField);JButton button = new JButton("login");button.setBackground(new Color(255, 255, 255));button.setBounds(126, 121, 212, 23);frame.getContentPane().add(button);button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {String getUserName = formattedTextField.getText();String getUserPwd = passwordField.getText();if (userName.equals(getUserName) && userPwd.equals(getUserPwd)) {isLogin = true;} else {isLogin = false;}if (isLogin) {JOptionPane.showMessageDialog(null, "登录成功!", "消息", JOptionPane.PLAIN_MESSAGE);label_3.setText("已登录");label_3.setForeground(Color.BLUE);} else {JOptionPane.showMessageDialog(null, "登录失败!", "消息", JOptionPane.WARNING_MESSAGE); label_3.setText("未登录");label_3.setForeground(Color.RED);}}});}}四、解决中⽂乱码问题Run as > Run Condiguration,在Arguments中增加下⾯这句话:-Dfile.encoding=gbk。
JAVA模拟键盘鼠标操作

//可以在eclipse下直接运行的示例程序:package key_robot;import java.awt.*;import java.awt.event.*;import javax.swing.JOptionPane;public class key_robot {public key_robot() {}// 鼠标单击,要双击就连续调用private static void pressMouse(Robot r, int m, int delay) { r.mousePress(m);r.delay(10);r.mouseRelease(m);r.delay(delay);}// 键盘输入方法private static void pressKeys(Robot r, int[] ks, int delay) { for (int i = 0; i < ks.length; i++) {r.keyPress(ks[i]);r.delay(10);r.keyRelease(ks[i]);r.delay(delay);}}public static void main(String[] args) throws Exception { final Robot rb = new Robot();new Thread() {public void run() {rb.delay(2000); // 模拟回车rb.keyPress(KeyEvent.VK_ENTER);rb.keyRelease(KeyEvent.VK_ENTER);}}.start();JOptionPane.showMessageDialog(null,"以下程序自动执行,包括本对话框,点击运行后请不要移动鼠标和键盘.\n如果不能正常执行程序,请先关闭输入法");rb.delay(1500);// 设置开始菜单的大概位置int x = 40;int y = Toolkit.getDefaultToolkit().getScreenSize().height- 10; // 鼠标移动到开始菜单,rb.mouseMove(x, y);rb.delay(500);// 单击三次开始菜单for (int i = 0; i < 3; i++)pressMouse(rb, InputEvent.BUTTON1_MASK, 500);rb.delay(1000);// 运行CMD命令r cmd enterint[] ks = { KeyEvent.VK_R, KeyEvent.VK_C, KeyEvent.VK_M,KeyEvent.VK_D, KeyEvent.VK_ENTER, };pressKeys(rb, ks, 500);rb.mouseMove(400, 400);rb.delay(500);// 运行DIR命令dir enterks = new int[] { KeyEvent.VK_D, KeyEvent.VK_I, KeyEvent.VK_R, KeyEvent.VK_ENTER };pressKeys(rb, ks, 500);rb.delay(1000);// 运行CLS命令cls enterks = new int[] { KeyEvent.VK_C, KeyEvent.VK_L, KeyEvent.VK_S, KeyEvent.VK_ENTER };pressKeys(rb, ks, 500);rb.delay(1000);// 运行EXIT命令exit enterks = new int[] { KeyEvent.VK_E, KeyEvent.VK_X, KeyEvent.VK_I, KeyEvent.VK_T, KeyEvent.VK_ENTER };pressKeys(rb, ks, 500);rb.delay(1000);// 右键测试x = Toolkit.getDefaultToolkit().getScreenSize().width - 10;rb.mouseMove(x, y);// 如果是双键鼠标,请改用InputEvent.BUTTON2_MASK标pressMouse(rb, InputEvent.BUTTON3_MASK, 500);// 显示日期调整对话框apressKeys(rb, new int[] { KeyEvent.VK_A }, 1000);rb.delay(2000);pressKeys(rb, new int[] { KeyEvent.VK_ESCAPE }, 0);rb.delay(1000);new Thread() {public void run() {rb.delay(1000); // 回车rb.keyPress(KeyEvent.VK_ENTER);rb.keyRelease(KeyEvent.VK_ENTER);}}.start();JOptionPane.showMessageDialog(null, "演示完毕!");}}。
【JavaService】使用Java编写部署windows服务

【JavaService】使⽤Java编写部署windows服务如果你玩windows系统,你对服务这个东西并不会陌⽣,服务可以帮我们做很多事情,在不影响⽤户正常⼯作的情况下,可以完成很多我们需要的需求。
众所周知,微软的visio studio内置的Service类可以编写windows服务,对于⼀个Java开发⼈员来说,想要编写⼀个windows服务部署到服务器⾥⾯,还要在⾃⼰的开发环境装⼀个visio studio,那太⿇烦了。
那么问题来了,我想⽤java编写⼀个windows服务,这个想法可⾏吗?答案是肯定的,可⾏!开源的JavaService帮我们解决了这⼀个问题,使⽤java也可以编写⼀个windows服务部署到windows⾥⾯。
闲话不多说,来看看如何利⽤JavaService实现Java编写部署windows服务。
⾸先需要⽤到的⼀些开发⼯具:JDKEclipseJavaService这⾥我安装的JDK是1.6版本的,Eclipse⽤于编写⼀个JAVA⼯程,做饭炒⼀个菜,我们需要准备⼀些菜品原料,以上我们的菜都买好了,接下来看看主要准备⼯作和主要步骤。
⾸先安装JDK,默认安装到C盘就可以了。
然后配置java环境变量,这⾥就不细说了,上⼀个链接给予⼤家参考,环境变量要配置正确,这个很重要。
接着编写⼀个Java⼯程这⾥我贴出我的代码⽰例出来,是⼯作的⼀个需求,⼤致看⼀些主要代码即可,我下⾯会提到的。
这⾥是⼯程结构:代码:[java]1. <span style="font-family:Microsoft YaHei;font-size:14px;">package com.ecservice;2.3. import java.io.BufferedReader;4. import java.io.File;5. import java.io.FileNotFoundException;6. import java.io.FileOutputStream;7. import java.io.IOException;8. import java.io.InputStreamReader;9. import .InetAddress;10. import workInterface;11. import .SocketException;12. import .UnknownHostException;13. import java.text.SimpleDateFormat;14. import java.util.Date;15.16. public class ECService {17. private static Thread thread = null;18. private static Service service = null;19.20. /**21. * 退出服务⽅法(该⽅法必须有参数 String [] args)22. *23. * @param args24. */25. public static void StopService(String[] args) {26. System.out.println(service.getLocalTime()+"停⽌服务");27. service.setRunFlag(false);28. }29.30. /**31. * 启动服务⽅法(该⽅法必须有参数 String [] args)32. *33. * @param args34. */35. public static void StartService(String[] args) {36. // 产⽣服务线程37. service = new Service();38. thread = new Thread(service);39. System.out.println("\r\n"+service.getLocalTime()+"-----------启动服务-----------");40.41. try {42. // 将服务线程设定为⽤户线程,以避免StartService⽅法结束后线程退出43. thread.setDaemon(false);44. if (!thread.isDaemon()) {45. System.out.println(service.getLocalTime()+"成功设定线程为⽤户线程!");46. }47. // 启动服务线程48. thread.start();49. } catch (SecurityException se) {50. System.out.println(service.getLocalTime()+"线程类型设定失败!");51. }52. }53.54. public static void main(String[] args) {55. new Service().run();56. // ECService.StartService(null);57. }58. }59.60. class Service implements Runnable {61. private boolean runFlag = true;62.63. /**64. * 设定服务线程运⾏标志值65. *66. * @param runFlag67. */68. public synchronized void setRunFlag(boolean runFlag) {69. this.runFlag = runFlag;70. }71.72. /**73. * 取得服务线程运⾏标志值74. *75. * @param void76. */77. @SuppressWarnings("unused")78. private synchronized boolean getRunFlag() {79. return runFlag;80. }81.82. @Override83. public void run() {84. System.out.println(getLocalTime()+"服务线程开始运⾏");85. // while (getRunFlag()) {86. // 获取当前计算机名和MAC87. String hostName = getHostName();88. if (hostName != null) {89. System.out.println(getLocalTime()+"计算机名获取成功!");90. // 获取本机mac地址91. String localMac = getMac();92. if (localMac != null) {93. System.out.println(getLocalTime()+"mac获取成功!");94. String mac = subMac(localMac);95. // 匹配本机计算机名与mac地址96. if (!hostName.equals(mac)) {97. System.out.println(getLocalTime()+"开始执⾏修改计算机名称。
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 * 设置的颜⾊被布局管理器给覆盖住了,所以⽆法看见。
关于JAVA8 Window类的使用方法

关于JAVA8 Window类的使用方法作者:徐洪位来源:《电脑知识与技术》2018年第18期摘要:在进行JAVA程序设计时,窗口是常用的一个对象,窗口对象是没有边框和菜单栏的顶级窗口。
窗口的默认布局是边界布局。
一个窗口必须有一个框架、对话框或另一个定义为它的所有者的窗口。
该文对Window类的使用和设置进行了简要的介绍。
关键词:Window;Illegal Argument Exception;Graphics Configuration中图分类号:TP316 文献标识码:A 文章编号:1009-3044(2018)18-0069-021 概述在多屏幕环境中,您可以通过使用窗口(窗口、GraphicsConfiguration)创建窗口,在不同的屏幕设备上创建一个窗口。
GraphicsConfiguration对象是目标屏幕设备的GraphicsConfiguration对象之一。
在虚拟设备多屏幕环境中,桌面区域可以跨越多个物理屏幕设备,所有配置的边界都相对于虚拟设备坐标系统。
虚拟坐标系统的原点位于主物理屏幕的左上角。
根据虚拟设备中主屏幕的位置,可能会出现负坐标,如图1所示:其中Virtual device:虚拟设备;physical screen:物理屏幕;primary physical screen:主物理屏幕。
2 使用方法简介当在一个环境中调用setLocation方法时,必须将一个虚拟坐标传递给这个方法。
类似地,在窗口中调用getLocationOnScreen将返回虚拟设备的坐标。
调用GraphicsConfiguration的getBounds方法,在虚拟坐标系统中找到它的原点。
下面的代码将窗口的位置设置为(10,10)相对于相应图形配置的物理屏幕的原点。
如果没有考虑到GraphicsConfiguration的边界,窗口位置将设置为(10,10)相对于虚拟坐标系统,并且会出现在主物理屏幕上,这可能与指定图形配置的物理屏幕不同。
windows命令行窗口怎么运行Java程序

windows命令行窗口怎么运行Java程序
在安装了jdk的电脑上都是可以运行Java程序的,当运行测试一些小程序的时候就不必在IDE中了。
下面店铺用一个简单的HelloWorld程序看一下运行过程,教你如何在windows命令行窗口运行Java程序。
windows命令行窗口运行Java程序的方法
1.新建一个文本文件,就用windows的记事本吧。
2.打开记事本,输入一段代码。
3.保存的时候把后缀名修改为.java。
4.打开运行,在运行输入栏中输入cmd。
打开命令提示窗口。
5.先转到.java文件所在的位置。
这里是在d盘的根目录。
6.执行以下一句命令之后,可以看见在.java的文件夹里面生成了一个为.class的类文件。
7.执行以下命令之后,就可以看到结果了。
PPC各类软件安装方法介绍

PPC各类软件安装方法介绍(扫盲贴)作者:雨夜观月日期:2009-04-241.CAB格式CAB在电脑上是一个压缩包的格式,不过你千万不要把他解压缩,只要直接和手机同步后放到手机里面就可以了(放在Stroage或是Storage Card都可以),在CAB格式的文件全部拷贝到你的PPC手机上的时候,你只须要在你的PPC手机上执行该CAB文件既可进行安装了2.EXE格式EXE格式的软件。
EXE格式的程序可以分为手机连接电脑同步安装和手机端直接安装的程序2.1 如果是手机端直接安装的只需把文件拷贝到手机里运行,根据提示安装就可以了,一般化会在手机里面直接运行,类似于绿色软件的形式2.2 如果是手机和电脑同步安装的程序需要在电脑上运行安装程序,再根据手机屏幕上的提示安装即可。
3.tsk格式这是桌面主题的文件格式,安装只需要把文件拷贝到手机,然后在PPC手机里执行既可弹出主题设置界面,选择你想用的主题既可4.免安装软件(绿色软件)安装此类的软件是最简单的,只需要把文件拷贝到手机里就可以直接运行了,推荐尽量用这种软件,因为它不会在安装过程中产生一些不必要的文件。
不过这种软件在网上下载下来的时候一般是RAR或者ZIP格式文件压缩包,这个文件是要你现在自己的电脑上解压的,之后将解压出来的文件夹拷贝到手机里就可以了。
基本上就是如上的几种,下面说一些详细的安装教程。
详细:安装软件前,先将电脑“文件夹选项”中的“隐藏已知文件类型的扩展名”的勾去掉,这样能看出后缀名,方便安装软件1、扩展名为.exe,可以在电脑运行的软件这种软件是最正规的软件,类似于电脑上的软件,跟大部分软件的安装方法近似。
这是最简单的一种安装方式,只要把手机跟电脑同步,然后运行下载到的exe可执行文件。
电脑就会提示你如何操作安装,然后会提示你按照手机的提示接着安装。
选择安装位置放在手机或“storage card”(安装后,如果是在手机上,那程序就在\Storage\Program Files里面,如果是卡上,那就是\Storage Card\Program Files里面),在完成手机的操作后,在开始菜单里的就能找到该软件的快捷方式。
Java语言程序设计课程设计实训项目——模拟实现Windows 资源管理器的GUI界面(第2部分)

1.1模拟实现Windows 资源管理器的GUI界面(第2部分)1.1.1为所构建出的主窗口添加事件(功能性的操作)处理代码1、添加窗口关闭事件WindowClosing(1)进入事件面板在windowClosing事件项目中输入事件处理的方法名称为formWindowClosing,如下图所示:(2)或者在窗口内右击,在弹出菜单中选择“Events”下的具体事件类型也就是在此组件上点击右键-->Events-->找到事件的类型就可以了。
(3)在源代码窗口方式下编程该事件private void formWindowClosing(java.awt.event.WindowEvent evt) {int returnResult = JOptionPane.showConfirmDialog(null, "你是否真的要关闭窗口吗?", "关闭主窗口", JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);if (returnResult == JOptionPane.YES_OPTION) {this.dispose(); //不仅要关闭主窗口、而且也还要退出系统程序System.exit(0);}}(4)MyEclipse已经自动实现了事件的注册addWindowListener(new java.awt.event.WindowAdapter() {public void windowClosing(java.awt.event.WindowEvent evt) {formWindowClosing(evt);}});2、测试目前的事件响应是否正确在窗口弹出后,点击关闭窗口后,将出现下面的警告提示对话框。
如果点击该警告提示对话框中的“是”按钮,将可以正常地关闭主窗口了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
package windowcomponents;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Font;import java.awt.FontMetrics;import java.awt.GradientPaint;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import java.awt.Insets;import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JPopupMenu;public class WindowsStartMenuSimulation {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubDemoWindow15 dw = new DemoWindow15("模拟Windows开始菜单");dw.setBounds(dw.getToolkit().getScreenSize().width / 3, dw.getToolkit().getScreenSize().height / 3,dw.getToolkit().getScreenSize().width / 3, dw.getToolkit().getScreenSize().height / 3);dw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);dw.setVisible(true);}}class DemoWindow15 extends JFrame implements ActionListener {// 菜单项图片Image updateImage = new ImageIcon("images/update.gif").getImage();Image programImage = new ImageIcon("images/program.gif").getImage();Image documentImage = new ImageIcon("images/document.gif").getImage();Image setImage = new ImageIcon("images/set.gif").getImage();Image findImage = new ImageIcon("images/find.gif").getImage();Image helpImage = new ImageIcon("images/help.gif").getImage();Image runImage = new ImageIcon("images/run.gif").getImage();Image logoutImage = new ImageIcon("images/logout.gif").getImage();Image shutdownImage = new ImageIcon("images/shutdown.gif").getImage();// 按钮图片ImageIcon windowsImage = new ImageIcon("images/windows.gif");// “开始”按钮JButton jb = new JButton("开始", windowsImage);StartMenu sm = new StartMenu();// 布局面板JPanel jp1 = new JPanel();JPanel jp2 = new JPanel();ImageMenu1 im = null;public DemoWindow15(String title) {super(title);jb.setFont(new Font("宋体", Font.BOLD, 18));jp2.setLayout(new BorderLayout());jp2.add(jb, BorderLayout.WEST);add(jp1, BorderLayout.CENTER);add(jp2, BorderLayout.SOUTH);im = new ImageMenu1("Windows Update", updateImage); im.setFont(new Font("宋体", Font.BOLD, 22));sm.add(im);im = new ImageMenu1("程序", programImage);im.setFont(new Font("宋体", Font.BOLD, 22));sm.add(im);im = new ImageMenu1("文档", documentImage);im.setFont(new Font("宋体", Font.BOLD, 22));sm.add(im);im = new ImageMenu1("设置", setImage);im.setFont(new Font("宋体", Font.BOLD, 22));sm.add(im);im = new ImageMenu1("搜索", findImage);im.setFont(new Font("宋体", Font.BOLD, 22));sm.add(im);im = new ImageMenu1("帮助和支持", helpImage);im.setFont(new Font("宋体", Font.BOLD, 22));sm.add(im);im = new ImageMenu1("运行", runImage);im.setFont(new Font("宋体", Font.BOLD, 22));sm.add(im);im = new ImageMenu1("注销", logoutImage);im.setFont(new Font("宋体", Font.BOLD, 22));sm.add(im);im = new ImageMenu1("关机", shutdownImage);im.setFont(new Font("宋体", Font.BOLD, 22));sm.add(im);// 添加事件监听器jb.addActionListener(this);}public void actionPerformed(ActionEvent e) {// TODO Auto-generated method stub// 设置菜单可见,获得菜单的高度,便于下一步设置菜单的位置sm.setVisible(true);// 显示图片菜单,通过位置设置,显示向上弹出的效果sm.show(jp1, 0, jp1.getHeight() - sm.getHeight());}}class StartMenu extends JPopupMenu {// 显示Windows XP professional的文字图片private Image image = null;public StartMenu() {// 创建文字图片image = createImage();}public Image createImage() {String text = "Windows XP Professional";// 创建缓冲图片类变量BufferedImage bi = new BufferedImage(30, 400,BufferedImage.TYPE_INT_ARGB);// 获取缓冲图片的2D绘图类变量Graphics2D g2d = bi.createGraphics();// 绘制渐变背景GradientPaint paint = new GradientPaint(0, 0, Color.black, 100, 100,Color.blue, true);g2d.setPaint(paint);g2d.fillRect(0, 0, bi.getWidth(), bi.getHeight());// 逆时针旋转绘制角度90度AffineTransform at = new AffineTransform();at.rotate(-Math.PI / 2);g2d.setTransform(at);g2d.setColor(Color.white);g2d.setFont(new Font("宋体", Font.BOLD, 16));// 获取文字尺寸FontMetrics metrics = g2d.getFontMetrics();int width = metrics.stringWidth(text);int height = metrics.getAscent();// 居中绘制文字g2d.drawString(text, -width - 50, bi.getWidth() / 2);return bi;}public Insets getInsets() {Insets insets = (Insets) super.getInsets().clone();insets.left += image.getWidth(null);return insets;}public void paint(Graphics g) {super.paint(g);if (image != null) {Insets insets = getInsets();g.drawImage(image, insets.left - image.getWidth(null), insets.top,null);}}}// 图片菜单项类class ImageMenu1 extends JMenuItem {private Image image = null;public ImageMenu1(String title, Image image) {super(title);this.image = image;}// 设置菜单项中显示文字图片的间隔大小public Insets getInsets() {Insets insets = (Insets) super.getInsets().clone();insets.left += image.getWidth(null);return insets;}// 重载绘图函数public void paint(Graphics g) {super.paint(g);if (image != null) {// 获取间隔Insets insets = getInsets();g.drawImage(image, 0, 0, null);}}}。