我做了一个菜单栏,我的目的是想点菜单栏的子菜单后弹出一个可输入文本的对话窗口,不知怎么弄,请指教,谢谢……
解决方案 »
- 请各位高手看看如何运行这个Java程序!!急
- 类似java里的import功能:根据模糊的路径找到所有符合条件的文件。
- 这个程序为什么出错?
- ●●● 200本Java书籍下载...........................................
- 小弟被中软安人公司录用了,请问这公司怎么样哦!(赠笔试一题)
- 关于用split方法分隔字符串中遇到的奇怪问题
- 在Java中使用字符串连接sql server7.0 和sql server2000有什么不同?
- 什么叫做规则引擎
- java中能调用什么声音格式的文件?怎样调用?
- 再次请教!
- js下有没有类似java.net.encode 的函数
- 不知道是什么错误,怎么改呢?
到底是啥东西?
第二种方法就是自己新建一个类继承JDialog,也就是自己做一个对话框
import java.awt.event.*;
import java.util.Calendar;
import java.util.GregorianCalendar;import javax.swing.*;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;public class AlarmClock {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
AlarmFrame f = new AlarmFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
});
}
}@SuppressWarnings("serial")
class AlarmFrame extends JFrame implements Runnable {
Thread clock; public AlarmFrame() {
@SuppressWarnings("unused")
MenuItem b=null;
setTitle("AlarmClock");
setSize(200, 100);
setFont(new Font("Times New Roman", Font.BOLD, 40));
start();
Menu switchMenu = new Menu("开关设置");
switchMenu.add(new MenuItem("开"));
switchMenu.add(new MenuItem("关"));
Menu timeMenu = new Menu("闹铃设置");
timeMenu.add(new MenuItem("闹铃时间"));
b.addActionListener(listener);
b=new MenuItem("闹铃时间");
Menu stopMenu = new Menu("停止闹铃");
stopMenu.add(new MenuItem("stop"));
MenuBar menuBar = new MenuBar();
setMenuBar(menuBar);
menuBar.add(switchMenu);
menuBar.add(timeMenu);
menuBar.add(stopMenu);
} public void start() {
if (clock == null) {
clock = new Thread(this);
clock.start();
}
} public void run() {
while (clock != null) {
repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
} public void stop() {
clock = null;
} public void paint(Graphics g) {
// Graphics2D g2=(Graphics2D g){
Calendar now = new GregorianCalendar();
String timeInfo = "";
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute = now.get(Calendar.MINUTE);
int second = now.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.orange);
g.drawString(timeInfo, 20, 80); }
ActionListener listener=new ActionListener(){
public void actionPerformed(ActionEvent e){
if((e.getActionCommand()).equals("闹铃时间")){
TextField tf;
tf=new TextField(7);
JFrame ff=new JFrame("闹铃时间");
ff.setSize(100,100);
ff.setVisible(true);
final Panel p=new Panel();
p.add(tf);
ff.add(p);
}
}
};
}
我这代码的目的是想点击一下菜单里的”闹铃设置“后,再点一下所弹出的子菜单“闹铃时间”后能弹出一个新窗口,不知这样写错在哪,请高手赐教,非常感谢……
b.addActionListener(listener);
b=new MenuItem("闹铃时间");
这两行代码要互换下位置,因为你的b刚开始只是定义了没有赋值,你就直接为b添加了事件,所以出现异常。应该先为b赋值再为它添加事件,你先把这个错误改过来后再改下面的问题二
timeMenu.add(new MenuItem("闹铃时间"));
b.addActionListener(listener);
b=new MenuItem("闹铃时间");你把timeMenu.add(new MenuItem("闹铃时间")); 改成timeMenu.add(b);当然改后要把这3句的顺序调整一下 ,明白了吧,改了后在我的机子上可以得到你要的效果。