为了账号安全,请及时绑定邮箱和手机立即绑定

如何实现点击菜单项运行其他操作?

这是实现窗口的部分代码;
package EngineeringDesign;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
public class MenuDemo implements ActionListener {
	private String newline = "\n";
	private JTextArea output;
	public JMenuBar createMenuBar(){
		JMenuBar menubar =new JMenuBar();
		JMenu menu,submenu,imenu = new JMenu();
		JMenuItem menuitem,menuitem1,menuitem2;

		JRadioButtonMenuItem rbmenu;
		JCheckBoxMenuItem checkbox;
//		定义第一个菜单
		menu = new JMenu("(A)功能菜单");
		menu.setMnemonic(KeyEvent.VK_A);
		menubar.add(menu);
		
		menuitem = new JMenuItem("(O)计时秒表窗口");
		menuitem.setMnemonic(KeyEvent.VK_O);
//		设置快捷键
		menuitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,ActionEvent.ALT_MASK));
//		设置监听,当键盘或鼠标操作是调用操作
		menu.add(menuitem);
		menuitem.addActionListener(this);
		public static void main(String[] args) {
	
	JFrame frame = new JFrame("菜单演示窗口");
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	
	MenuDemo demo = new MenuDemo();
	JMenuBar mb = demo.createMenuBar();
	 frame.setJMenuBar(mb);
	 
	 
	 frame.setSize(500,400);
	 frame.setLocation(450,300);
	 frame.setVisible(true);
	 
	
	}
}
是时钟的代码
package EngineeringDesign;
import javax.swing.*; 
import java.awt.*; 
import java.awt.geom.*;
import java.text.DateFormat;
import java.awt.event.*; 
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar; 
/** 
* This is the main Function of the program. 
*/ 
public class Clock{ 
public static void main(String []args){ 
ClockFrame frame = new ClockFrame(); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.setVisible(true); 
} 
} 
/** 
* This class is used to define the main frame of the clock 
*/ 
class ClockFrame extends JFrame{ 
//constructor function 
public ClockFrame(){ 
setTitle("小时钟"); 
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); 
setLocation(DEFAULT_LOC_WIDTH, DEFAULT_LOC_HEIGHT); 
ClockPanel panel = new ClockPanel(); 
add(panel); 
} 
//variables of the frame 
private int DEFAULT_LOC_WIDTH = 300; 
private int DEFAULT_LOC_HEIGHT = 300; 
private int DEFAULT_WIDTH = 330; 
private int DEFAULT_HEIGHT = 380; 
} 
/** 
* This class is used to defind the main panel of the clock 
*/ 
class ClockPanel extends JPanel{ 
public void paintComponent(Graphics g){ 
super.paintComponent(g); 
Graphics2D g2 = (Graphics2D) g; 
//get the time of the system 
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);
GregorianCalendar calendar = new GregorianCalendar(); 
calendar.setTime(new Date());//dateFormat.format(calendar.getTime())
String timeInfo=""; //输出信息
int hour = calendar.get(Calendar.HOUR); 
int minute = calendar.get(Calendar.MINUTE); 
int second = calendar.get(Calendar.SECOND); 


if (hour<=9)
    timeInfo+="0"+hour+":"; //格式化输出
 else
    timeInfo+=hour+":";
 if (minute<=9)
    timeInfo+="0"+minute+":";
 else
    timeInfo+=minute+":";
 if (second<=9)
    timeInfo+="0"+second;
 else
     timeInfo+=second;
 g.setColor(Color.white);  //设置当前颜色为白色
 Dimension dim=getSize();  //得到窗口尺寸
 g.fillRect(0,0,dim.width,dim.height);  //填充背景色为白色
 g.setColor(Color.black);  //设置当前颜色为橙色
 g.drawString(timeInfo,130,300);  //显示时间字符串
 g.setColor(Color.black);
 g.drawString(dateFormat.format(calendar.getTime()),10,30);
 g.setColor(Color.black);
 g.setFont(new Font("SAN_SERIF",Font.BOLD,15));
for(int i=0,num=12;i<360;i+=6)
{ 
double alfa = Math.toRadians(i);
int xPos=CENTER_X+(int)(R*Math.sin(alfa));
int yPos=CENTER_Y-(int)(R*Math.cos(alfa));
if(i%10==0)
{
if (num%3==0)
 g.setColor(Color.red);  //  数字3,6,9,12为红色
else
 g.setColor(Color.black);  // 其余数字为黑色
if(num==12)
{
g.drawString(""+num,xPos-5,yPos+3);}// 写数字
else
	g.drawString(""+(num%12),xPos-5,yPos+3);
num=num+1;
}

}


//draw the clock face 
Ellipse2D clockFace = new Ellipse2D.Double(); 
clockFace.setFrameFromCenter(CENTER_X, CENTER_Y, CENTER_X+RADIUS, CENTER_Y+RADIUS); 
g2.setColor(Color.BLUE); 
g2.draw(clockFace); 
//draw the clock center 
Ellipse2D clockCenter = new Ellipse2D.Double(); 
clockCenter.setFrameFromCenter(CENTER_X, CENTER_Y, CENTER_X+INNER_RADIUS, CENTER_Y+INNER_RADIUS); 
g2.setColor(Color.RED); 
g2.fill(clockCenter); 
//help to get the exact position of the lines 
double lenX, lenY, posX, posY; 
//draw the clock second line 
Line2D clockSecond = new Line2D.Double(); 
double secondTime = (double) calendar.get(Calendar.SECOND); 
lenX = SECOND_LEN*Math.sin(2*Math.PI*secondTime/60.0); 
lenY = SECOND_LEN*Math.cos(2*Math.PI*secondTime/60.0); 
posX = CENTER_X + lenX; 
posY = CENTER_Y - lenY; 
clockSecond.setLine(CENTER_X, CENTER_Y, posX, posY); 
g2.setColor(Color.PINK); 
g2.draw(clockSecond); 
//draw the clock minute line 
Line2D clockMinute = new Line2D.Double(); 
double minuteTime = (double) calendar.get(Calendar.MINUTE); 
lenX = MINUTE_LEN*Math.sin(2*Math.PI*(secondTime+60*minuteTime)/3600.0); 
lenY = MINUTE_LEN*Math.cos(2*Math.PI*(secondTime+60*minuteTime)/3600.0); 
posX = CENTER_X + lenX; 
posY = CENTER_Y - lenY; 
clockMinute.setLine(CENTER_X, CENTER_Y, posX, posY); 
g2.setColor(Color.GREEN); 
g2.draw(clockMinute); 
//draw the clock hour line 
Line2D clockHour = new Line2D.Double(); 
double hourTime = (double) calendar.get(Calendar.HOUR); 
lenX = HOUR_LEN*Math.sin(2*Math.PI*((secondTime+60*minuteTime+3600*hourTime)/43200.0)); 
lenY = HOUR_LEN*Math.cos(2*Math.PI*((secondTime+60*minuteTime+3600*hourTime)/43200.0)); 
posX = CENTER_X + lenX; 
posY = CENTER_Y - lenY; 
clockHour.setLine(CENTER_X, CENTER_Y, posX, posY); 
g2.setColor(Color.BLUE); 
g2.draw(clockHour); 
int delay = 1000; 
// actionListener 
ActionListener drawClock; 
drawClock=new ActionListener(){ 
public void actionPerformed(ActionEvent evt){ 
repaint(); 
} 
}; 
//create timer 
new Timer(delay, drawClock).start(); 
} 
//variables of the panel 
private int HOUR_LEN = 50; 
private int MINUTE_LEN = 70; 
private int SECOND_LEN = 90; 
private int RADIUS = 100; 
private int INNER_RADIUS = 2; 
private int CENTER_X = 150; 
private int CENTER_Y = 150; 
private int R=90;
}

http://img1.sycdn.imooc.com//567a496000015bc004030297.jpg如图所示点击“时钟窗口”弹出时钟。主窗口和时钟写在不同类中。大神,代码在上方请问如何实现?

正在回答

3 回答

package test;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.*;
public class Frames {
	JFrame f=new JFrame("例子");
	JMenuBar m1 = new JMenuBar();
	JMenu menu1=new JMenu("菜单1");
	JMenuItem item1=new JMenuItem("时钟");
	public Frames(){
	f.setSize(400,500);
	f.setJMenuBar(m1);
	
	m1.add(menu1);
	menu1.add(item1);
	
	// 对子菜单的时间监听
	item1.addMouseListener(new MouseListener(){

		@Override
		public void mouseClicked(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseEntered(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseExited(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mousePressed(MouseEvent e) {
			// TODO Auto-generated method stub
			Clock clock=new Clock();//弹出时钟
			f.add(clock);
			f.repaint();//刷新
		}

		@Override
		public void mouseReleased(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}
		
	});
	
	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	f.setVisible(true);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Frames();
	}

}

package test;

import java.awt.Color;
import javax.swing.*;
public class Clock extends JButton{

	public Clock(){
		this.setBounds(50,50, 100, 100);
		this.setBackground(Color.blue);
	}
}

这是一个例子,你好好看看就知道了,你的代码不全我不好直接弄

0 回复 有任何疑惑可以回复我~
#1

橙子lovesun 提问者

嗯嗯,懂了,谢谢哈。
2015-12-24 回复 有任何疑惑可以回复我~

package test;

import java.awt.*;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

 

import javax.swing.*;

public class Frames {

    JFrame f=new JFrame("例子");

    JMenuBar m1 = new JMenuBar();

    JMenu menu1=new JMenu("菜单1");

    JMenuItem item1=new JMenuItem("时钟");

    public Frames(){

    f.setSize(400,500);

    f.setJMenuBar(m1);

     

    m1.add(menu1);

    menu1.add(item1);

     

    // 对子菜单的时间监听

    item1.addMouseListener(new MouseListener(){

 

        @Override

        public void mouseClicked(MouseEvent e) {

            // TODO Auto-generated method stub

             

        }

 

        @Override

        public void mouseEntered(MouseEvent e) {

            // TODO Auto-generated method stub

             

        }

 

        @Override

        public void mouseExited(MouseEvent e) {

            // TODO Auto-generated method stub

             

        }

 

        @Override

        public void mousePressed(MouseEvent e) {

            // TODO Auto-generated method stub

            Clock clock=new Clock();//弹出时钟

            f.add(clock);

            f.repaint();//刷新

        }

 

        @Override

        public void mouseReleased(MouseEvent e) {

            // TODO Auto-generated method stub

             

        }

         

    });

     

    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    f.setVisible(true);

    }

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        new Frames();

    }

 

}

 

package test;

 

import java.awt.Color;

import javax.swing.*;

public class Clock extends JButton{

 

    public Clock(){

        this.setBounds(50,50, 100, 100);

        this.setBackground(Color.blue);

    }

}


0 回复 有任何疑惑可以回复我~

在监听中实现对时钟类的实例化。即当你点击时钟窗口这个选项时监听事件执行,例如这样:bt.addActionListener(new ActionListener()//按钮监听        

 {             public void actionPerformed(ActionEvent e)

            {   

             new ClockFrame();

        }      

 });

你的时钟窗口子菜单时间监听中实现。

0 回复 有任何疑惑可以回复我~
#1

橙子lovesun 提问者

请问下,另一个时钟类需不需要添加什么啊?不知为什么在菜单类中添加了那些代码,还是无法弹出时钟窗口。
2015-12-23 回复 有任何疑惑可以回复我~
#2

橙子lovesun 提问者

请问。。。。
2015-12-23 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第一季(IDEA工具)升级版
  • 参与学习       1165253    人
  • 解答问题       17581    个

0基础萌新入门第一课,从Java环境搭建、工具使用、基础语法开始

进入课程

如何实现点击菜单项运行其他操作?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信