JFrame 监听KeyListener事件?? 本帖最后由 Mosesbaby 于 2009-06-14 00:36:38 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可能是内部类的问题内部类MyKeyAdapter为private而main在外部类里,可以访问 嗯~~谢谢楼上两位的回答~~问题补充:我的MyPaintFrame.java文件里面的布局如下public MyPaintFrame() { super("Simple Drawing Board"); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); addKeyListener(new KeyInput()); panel=new MyPaintPanel(); showMenu(); //showTools();//我将这句话注释掉,就一切正常了,键盘响应也有了。 getContentPane().add(panel); }注释掉的showTools函数如下,相关的定义我就省略了 >_< :public void showTools() { choice=new JToolBar("Please choose:"); tool=new JLabel("Tools:"); color=new JLabel("Colors:"); size=new JLabel("Sizes:"); tools=new JComboBox(); colors=new JComboBox(); sizes=new JComboBox(); choice.setLayout(new FlowLayout()); ClearScreen=new JButton("ClearScreen"); for(String to:myTools) //myTools是一个String类型的数组 tools.addItem(to); for(String co:myColors) //myColors是一个String类型的数组 colors.addItem(co); for(String si:mySizes) //mySizes是一个String类型的数组 sizes.addItem(si); choice.add(tool); choice.add(tools); choice.add(color); choice.add(colors); choice.add(size); choice.add(sizes); choice.add(ClearScreen); add(choice,BorderLayout.NORTH); tools.addItemListener(new ItemListener(){ @Override public void itemStateChanged(ItemEvent e) { String str=(String)e.getItem(); if(str.equals("Text")) panel.setTool(1); else if(str.equals("Line")) panel.setTool(2); else if(str.equals("Circle")) panel.setTool(3); else if(str.equals("Rectangle")) panel.setTool(4); else if(str.equals("Move")) panel.setTool(5); else if(str.equals("ChangeColor")) panel.setTool(6); else if(str.equals("Clear")) panel.setTool(7); else if(str.equals("ChangeSize")) panel.setTool(8); }}); colors.addItemListener(new ItemListener(){ @Override public void itemStateChanged(ItemEvent e) { String str=(String)e.getItem(); if(str.equals("Red")) panel.setColor(Color.red); else if(str.equals("Black")) panel.setColor(Color.black); else if(str.equals("Blue")) panel.setColor(Color.blue); else if(str.equals("Green")) panel.setColor(Color.green); else if(str.equals("More")) { Color c=null; c=JColorChooser.showDialog(MyPaintFrame.this, "Choose the Color", c); panel.setColor(c); } }}); sizes.addItemListener(new ItemListener(){ @Override public void itemStateChanged(ItemEvent e) { String str=(String)e.getItem(); if(str.equals("1")) panel.setSize(1); else if(str.equals("3")) panel.setSize(3); else if(str.equals("5")) panel.setSize(5); else if(str.equals("7")) panel.setSize(7); else if(str.equals("9")) panel.setSize(9); else if(str.equals("More")) panel.setSize((Integer.valueOf(JOptionPane.showInputDialog(MyPaintFrame.this, "More Sizes:")))); }}); ClearScreen.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { panel.clearScreen(); }}); }难道是因为其中又有ItemListener的原因~~~实在是不知道为什么~~求各位指点~~ JDBC在mysql中查询中文返回结果为空 第二次,真的是第二次哦^_^ 【求助】使用IntelliJ IDEA的几个初级问题!!! 请问哪里有学习visual age for java的书籍下载?谢谢 请问javax.sql是在哪一个jar里的?在线等待 请问如何在linux下面安装jdk,需要怎么配置呢? jdbc 驱动数据库方面的问题,欢迎高手献技 JAVA的菜单事件一定给分 国内哪里有jdk的源码可down,多谢! 求个正则表达式,万分感谢 怎么给JComboBox设置值 关于鼠标的问题
内部类MyKeyAdapter为private
而main在外部类里,可以访问
问题补充:我的MyPaintFrame.java文件里面的布局如下
public MyPaintFrame() {
super("Simple Drawing Board");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
addKeyListener(new KeyInput());
panel=new MyPaintPanel();
showMenu();
//showTools();//我将这句话注释掉,就一切正常了,键盘响应也有了。
getContentPane().add(panel);
}注释掉的showTools函数如下,相关的定义我就省略了 >_< :
public void showTools() {
choice=new JToolBar("Please choose:");
tool=new JLabel("Tools:");
color=new JLabel("Colors:");
size=new JLabel("Sizes:");
tools=new JComboBox();
colors=new JComboBox();
sizes=new JComboBox();
choice.setLayout(new FlowLayout());
ClearScreen=new JButton("ClearScreen"); for(String to:myTools) //myTools是一个String类型的数组
tools.addItem(to); for(String co:myColors) //myColors是一个String类型的数组
colors.addItem(co); for(String si:mySizes) //mySizes是一个String类型的数组
sizes.addItem(si);
choice.add(tool);
choice.add(tools);
choice.add(color);
choice.add(colors);
choice.add(size);
choice.add(sizes);
choice.add(ClearScreen);
add(choice,BorderLayout.NORTH);
tools.addItemListener(new ItemListener(){ @Override
public void itemStateChanged(ItemEvent e) {
String str=(String)e.getItem();
if(str.equals("Text"))
panel.setTool(1);
else if(str.equals("Line"))
panel.setTool(2);
else if(str.equals("Circle"))
panel.setTool(3);
else if(str.equals("Rectangle"))
panel.setTool(4);
else if(str.equals("Move"))
panel.setTool(5);
else if(str.equals("ChangeColor"))
panel.setTool(6);
else if(str.equals("Clear"))
panel.setTool(7);
else if(str.equals("ChangeSize"))
panel.setTool(8);
}});
colors.addItemListener(new ItemListener(){ @Override
public void itemStateChanged(ItemEvent e) {
String str=(String)e.getItem();
if(str.equals("Red"))
panel.setColor(Color.red);
else if(str.equals("Black"))
panel.setColor(Color.black);
else if(str.equals("Blue"))
panel.setColor(Color.blue);
else if(str.equals("Green"))
panel.setColor(Color.green);
else if(str.equals("More"))
{
Color c=null;
c=JColorChooser.showDialog(MyPaintFrame.this, "Choose the Color", c);
panel.setColor(c);
}
}});
sizes.addItemListener(new ItemListener(){ @Override
public void itemStateChanged(ItemEvent e) {
String str=(String)e.getItem();
if(str.equals("1"))
panel.setSize(1);
else if(str.equals("3"))
panel.setSize(3);
else if(str.equals("5"))
panel.setSize(5);
else if(str.equals("7"))
panel.setSize(7);
else if(str.equals("9"))
panel.setSize(9);
else if(str.equals("More"))
panel.setSize((Integer.valueOf(JOptionPane.showInputDialog(MyPaintFrame.this, "More Sizes:"))));
}});
ClearScreen.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
panel.clearScreen();
}});
}难道是因为其中又有ItemListener的原因~~~
实在是不知道为什么~~求各位指点~~