Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么keylistener不在这里工作?_Java_Swing - Fatal编程技术网

Java 为什么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;

我已经实现了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;
    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();
} 
公共无效文本()
{
系统输出打印项次(标签);
}
//提供擦除功能的函数
公开作废删除()