Java 为什么keylistener不在这里工作?
我已经实现了keylistener接口并实现了所有需要的方法,但是当我按下键时,这里什么都没有发生,为什么Java 为什么keylistener不在这里工作?,java,swing,Java,Swing,我已经实现了keylistener接口并实现了所有需要的方法,但是当我按下键时,这里什么都没有发生,为什么 package swing; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.Point;
package swing;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
class Paper extends JPanel implements MouseListener,MouseMotionListener,ActionListener,KeyListener
{
static BufferedImage image;
String shape;
Color color=Color.black;
Point start;
Point end;
Point mp;
Button elipse=new Button("elipse");
int x[]=new int[50];
int y[]=new int[50];
Button rectangle=new Button("rect");
Button line=new Button("line");
Button roundrect=new Button("roundrect");
Button polygon=new Button("poly");
Button text=new Button("text");
ImageIcon erasericon=new ImageIcon("images/eraser.gif");
JButton erase=new JButton(erasericon);
JButton[] colourbutton=new JButton[9];
String selected;
Point label;
String key;
int ex,ey;//eraser
//DatagramSocket dataSocket;
JButton button = new JButton("test");
JLayeredPane layerpane;
Point p=new Point();
int w,h;
public Paper()
{
JFrame frame=new JFrame("Whiteboard");
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(640, 480);
frame.setBackground(Color.black);
layerpane=frame.getLayeredPane();
setWidth(539,444);
setBounds(69,0,555,444);
layerpane.add(this,new Integer(2));
layerpane.add(this.addButtons(),new Integer(0));
setLayout(null);
setOpaque(false);
addMouseListener(this);
addMouseMotionListener(this);
setFocusable(true);
addKeyListener(this);
System.out.println(isFocusable());
setBorder(BorderFactory.createLineBorder(Color.black));
}
public void paintComponent(Graphics g)
{
try
{
super.paintComponent(g);
g.drawImage(image, 0, 0, this);
Graphics2D g2 = (Graphics2D)g;
if(color!=null)
g2.setPaint(color);
if(start!=null && end!=null)
{
if(selected==("elipse"))
g2.drawOval(start.x, start.y,(end.x-start.x),(end.y-start.y));
else if(selected==("rect"))
g2.drawRect(start.x, start.y, (end.x-start.x),(end.y-start.y));
else if(selected==("rrect"))
g2.drawRoundRect(start.x, start.y, (end.x-start.x),(end.y-start.y),11,11);
else if(selected==("line"))
g2.drawLine(start.x,start.y,end.x,end.y);
else if(selected==("poly"))
g2.drawPolygon(x,y,2);
}
}
catch(Exception e)
{}
}
//Function to draw the shape on image
public void draw()
{
Graphics2D g2 = image.createGraphics();
g2.setPaint(color);
if(start!=null && end!=null)
{
if(selected=="line")
g2.drawLine(start.x, start.y, end.x, end.y);
else if(selected=="elipse")
g2.drawOval(start.x, start.y, (end.x-start.x),(end.y-start.y));
else if(selected=="rect")
g2.drawRect(start.x, start.y, (end.x-start.x),(end.y-start.y));
else if(selected==("rrect"))
g2.drawRoundRect(start.x, start.y, (end.x-start.x),(end.y-start.y),11,11);
else if(selected==("poly"))
g2.drawPolygon(x,y,2);
}
if(label!=null)
{
JTextArea textarea=new JTextArea();
if(selected==("text"))
{
textarea.setBounds(label.x, label.y, 50, 50);
textarea.setMaximumSize(new Dimension(100,100));
textarea.setBackground(new Color(237,237,237));
add(textarea);
g2.drawString("key",label.x,label.y);
}
}
start=null;
repaint();
g2.dispose();
}
public void text()
{
System.out.println(label);
}
//Function which provides the erase functionality
public void erase()
{
Graphics2D pic=(Graphics2D) image.getGraphics();
Color erasecolor=new Color(237,237,237);
pic.setPaint(erasecolor);
if(start!=null)
pic.fillRect(start.x, start.y, 10, 10);
}
//To set the size of the image
public void setWidth(int x,int y)
{
System.out.println("("+x+","+y+")");
w=x;
h=y;
image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
}
//Function to add buttons into the panel, calling this function returns a panel
public JPanel addButtons()
{
JPanel buttonpanel=new JPanel();
buttonpanel.setMaximumSize(new Dimension(70,70));
JPanel shape=new JPanel();
JPanel colourbox=new JPanel();
shape.setLayout(new GridLayout(4,2));
shape.setMaximumSize(new Dimension(70,140));
colourbox.setLayout(new GridLayout(3,3));
colourbox.setMaximumSize(new Dimension(70,70));
buttonpanel.setLayout(new BoxLayout(buttonpanel,BoxLayout.Y_AXIS));
elipse.addActionListener(this);
elipse.setToolTipText("Elipse");
rectangle.addActionListener(this);
rectangle.setToolTipText("Rectangle");
line.addActionListener( this);
line.setToolTipText("Line");
erase.addActionListener(this);
erase.setToolTipText("Eraser");
roundrect.addActionListener(this);
roundrect.setToolTipText("Round rect");
polygon.addActionListener(this);
polygon.setToolTipText("Polygon");
text.addActionListener(this);
text.setToolTipText("Text");
shape.add(elipse);
shape.add(rectangle);
shape.add(line);
shape.add(erase);
shape.add(roundrect);
shape.add(polygon);
shape.add(text);
buttonpanel.add(shape);
for(int i=0;i<9;i++)
{
colourbutton[i]=new JButton();
colourbox.add(colourbutton[i]);
if(i==0)
colourbutton[0].setBackground(Color.black);
else if(i==1)
colourbutton[1].setBackground(Color.white);
else if(i==2)
colourbutton[2].setBackground(Color.red);
else if(i==3)
colourbutton[3].setBackground(Color.orange);
else if(i==4)
colourbutton[4].setBackground(Color.blue);
else if(i==5)
colourbutton[5].setBackground(Color.green);
else if(i==6)
colourbutton[6].setBackground(Color.pink);
else if(i==7)
colourbutton[7].setBackground(Color.magenta);
else if(i==8)
colourbutton[8].setBackground(Color.cyan);
colourbutton[i].addActionListener(this);
}
buttonpanel.add(colourbox);
buttonpanel.setBounds(0, 0, 70, 210);
return buttonpanel;
}
public void mouseClicked(MouseEvent e)
{
if(selected=="text")
{
label=new Point();
label=e.getPoint();
draw();
}
}
@Override
public void mouseEntered(MouseEvent arg0)
{
}
public void mouseExited(MouseEvent arg0) {
}
public void mousePressed(MouseEvent e)
{
if(selected=="line"||selected=="erase"||selected=="text")
{
start=e.getPoint();
}
else if(selected=="elipse"||selected=="rect"||selected=="rrect")
{
mp = e.getPoint();
}
else if(selected=="poly")
{
x[0]=e.getX();
y[0]=e.getY();
}
}
public void mouseReleased(MouseEvent e)
{
if(start!=null)
{
if(selected=="line")
{
end=e.getPoint();
}
else if(selected=="elipse"||selected=="rect"||selected=="rrect")
{
end.x = Math.max(mp.x,e.getX());
end.y = Math.max(mp.y,e.getY());
}
else if(selected=="poly")
{
x[1]=e.getX();
y[1]=e.getY();
}
draw();
}
}
public void mouseDragged(MouseEvent e)
{
if(end==null)
end = new Point();
if(start==null)
start = new Point();
if(selected=="line")
{
end=e.getPoint();
}
else if(selected=="erase")
{
start=e.getPoint();
erase();
}
else if(selected=="elipse"||selected=="rect"||selected=="rrect")
{
start.x = Math.min(mp.x,e.getX());
start.y = Math.min(mp.y,e.getY());
end.x = Math.max(mp.x,e.getX());
end.y = Math.max(mp.y,e.getY());
}
else if(selected=="poly")
{
x[1]=e.getX();
y[1]=e.getY();
}
repaint();
}
public void mouseMoved(MouseEvent arg0) {}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==elipse)
selected="elipse";
else if(e.getSource()==line)
selected="line";
else if(e.getSource()==rectangle)
selected="rect";
else if(e.getSource()==erase)
{
selected="erase";
System.out.println(selected);
erase();
}
else if(e.getSource()==roundrect)
selected="rrect";
else if(e.getSource()==polygon)
selected="poly";
else if(e.getSource()==text)
selected="text";
if(e.getSource()==colourbutton[0])
color=Color.black;
else if(e.getSource()==colourbutton[1])
color=Color.white;
else if(e.getSource()==colourbutton[2])
color=Color.red;
else if(e.getSource()==colourbutton[3])
color=Color.orange;
else if(e.getSource()==colourbutton[4])
color=Color.blue;
else if(e.getSource()==colourbutton[5])
color=Color.green;
else if(e.getSource()==colourbutton[6])
color=Color.pink;
else if(e.getSource()==colourbutton[7])
color=Color.magenta;
else if(e.getSource()==colourbutton[8])
color=Color.cyan;
}
@Override
public void keyPressed(KeyEvent e)
{
System.out.println("pressed");
}
@Override
public void keyReleased(KeyEvent e)
{
System.out.println("key released");
}
@Override
public void keyTyped(KeyEvent e)
{
System.out.println("Typed");
}
public static void main(String[] a)
{
new Paper();
}
}
class Button extends JButton
{
String name;
public Button(String name)
{
this.name=name;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//g2.setStroke(new BasicStroke(1.2f));
if (name == "line") g.drawLine(5,5,30,30);
if (name == "elipse") g.drawOval(5,7,25,20);
if (name== "rect") g.drawRect(5,5,25,23);
if (name== "roundrect") g.drawRoundRect(5,5,25,23,10,10);
int a[]=new int[]{20,9,20,23,20};
int b[]=new int[]{9,23,25,20,9};
if (name== "poly") g.drawPolyline(a, b, 5);
if (name== "text") g.drawString("Text",5, 22);
}
}
package-swing;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.GridLayout;
导入java.awt.Point;
导入java.awt.RenderingHints;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.KeyEvent;
导入java.awt.event.KeyListener;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入java.awt.event.MouseMotionListener;
导入java.awt.event.WindowAdapter;
导入java.awt.event.WindowEvent;
导入java.awt.image.buffereImage;
导入javax.swing.BorderFactory;
导入javax.swing.BoxLayout;
导入javax.swing.ImageIcon;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLayeredPane;
导入javax.swing.JPanel;
导入javax.swing.JTextArea;
类论文扩展了JPanel实现了MouseListener、MouseMotionListener、ActionListener、KeyListener
{
静态缓冲图像;
线状;
颜色=颜色。黑色;
起点;
点端;
点mp;
按钮省略=新按钮(“省略”);
整数x[]=新整数[50];
整数y[]=新整数[50];
按钮矩形=新按钮(“矩形”);
按钮行=新按钮(“行”);
按钮roundrect=新按钮(“roundrect”);
按钮多边形=新按钮(“多边形”);
按钮文本=新按钮(“文本”);
ImageIcon橡皮擦=新的ImageIcon(“images/橡皮擦.gif”);
JButton erase=新JButton(橡皮擦);
JButton[]colorbutton=新JButton[9];
选择字符串;
点标签;
字符串键;
int-ex,ey;//橡皮擦
//datagramsocketdatasocket;
JButton按钮=新JButton(“测试”);
JLayeredPane layerpane;
点p=新点();
int w,h;
公共文件()
{
JFrame=新JFrame(“白板”);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
帧设置大小(640480);
框架.立根背景(颜色.黑色);
layerpane=frame.getLayeredPane();
设定宽度(539444);
挫折(69,0555444);;
layerpane.add(这个,新的整数(2));
layerpane.add(this.addButtons(),新整数(0));
setLayout(空);
设置不透明(假);
addMouseListener(这个);
addMouseMotionListener(此);
设置聚焦(真);
addKeyListener(此);
System.out.println(isFocusable());
setboorder(BorderFactory.createLineBorder(Color.black));
}
公共组件(图形g)
{
尝试
{
超级组件(g);
g、 drawImage(图像,0,0,this);
图形2d g2=(图形2d)g;
如果(颜色!=null)
g2.设置油漆(颜色);
如果(开始!=null&&end!=null)
{
如果(所选==(“elipse”))
g2.drawOval(start.x,start.y,(end.x-start.x),(end.y-start.y));
else if(选定==(“rect”))
g2.drawRect(start.x,start.y,(end.x-start.x),(end.y-start.y));
else if(已选==(“更正”))
g2.drawRoundRect(start.x,start.y,(end.x-start.x),(end.y-start.y),11,11);
else if(选定==(“行”))
g2.绘制线(起点x、起点y、终点x、终点y);
else if(选定==(“多边形”))
g2.绘制多边形(x,y,2);
}
}
捕获(例外e)
{}
}
//函数在图像上绘制形状
公众抽签()
{
Graphics2D g2=image.createGraphics();
g2.设置油漆(颜色);
如果(开始!=null&&end!=null)
{
如果(选定==“行”)
g2.绘制线(起点x、起点y、终点x、终点y);
else if(所选==“elipse”)
g2.drawOval(start.x,start.y,(end.x-start.x),(end.y-start.y));
else if(所选==“rect”)
g2.drawRect(start.x,start.y,(end.x-start.x),(end.y-start.y));
else if(已选==(“更正”))
g2.drawRoundRect(start.x,start.y,(end.x-start.x),(end.y-start.y),11,11);
else if(选定==(“多边形”))
g2.绘制多边形(x,y,2);
}
如果(标签!=null)
{
JTextArea textarea=新的JTextArea();
如果(选定==(“文本”))
{
textarea.setBounds(label.x,label.y,50,50);
textarea.setMaximumSize(新尺寸(100100));
textarea.setBackground(新颜色(237237237));
添加(文本区域);
g2.抽绳(“键”,label.x,label.y);
}
}
start=null;
重新油漆();
g2.dispose();
}
公共无效文本()
{
系统输出打印项次(标签);
}
//提供擦除功能的函数
公开作废删除()