java - GUI 中的可调圆

标签 java applet awt keylistener java-2d

我正在尝试编写一个绘制圆圈的小程序。如果我按 L,圆圈的大小会增大,如果我按 S,圆圈的大小会减小。

import java.applet.Applet; 
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class oval extends Applet implements KeyListener{

    private int d=10;
    @Override
    public void init() {
        setSize(500,500);
        addKeyListener(this);
    }
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.drawOval(100, 100, d, d);
    }
    @Override
    public void keyTyped(KeyEvent e) {   
    }
    @Override
    public void keyPressed(KeyEvent e) {
        if(e.getKeyChar()=='L')
            d=d+5;    
        else if(e.getKeyChar()=='S')
            d=d-5;
        repaint();
    }
    @Override
    public void keyReleased(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

最佳答案

编辑:抱歉,我没有完全阅读您的代码...您实际上正确使用了 KeyEvent,但是当您比较字符时,您需要使用小写 l 而不是大写:

if(e.getKeyChar() == 'l')

not

if(e.getKeyChar() == 'L')  //this will work if the user presses Shift+l

我刚刚向您展示了另一种方法,我设置的方法适用于小写 l 和大写 l。所以它不区分大小写。

您没有正确使用 KeyEvent 来触发特定按键。这是您经过测试并正常工作的代码:

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class oval extends Applet implements KeyListener
{
    private int d=10;

    @Override
    public void init() 
    {
        setSize(500,500);
        addKeyListener(this);
    }

    @Override
    public void paint(Graphics g) 
    {
        super.paint(g);
        g.drawOval(100, 100, d, d);
    }

    @Override
    public void keyTyped(KeyEvent e) 
    {
    }

    @Override
    public void keyPressed(KeyEvent e) 
    {
        if(e.getKeyCode()==KeyEvent.VK_L)
            d=d+5;    
        else if(e.getKeyCode()==KeyEvent.VK_S)
            d=d-5;
        repaint();
    }

    @Override
    public void keyReleased(KeyEvent e) 
    {

    }
}

我删除了您通过 keyReleased 事件抛出的错误,因为我不知道为什么会出现这种情况...

关于java - GUI 中的可调圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26512430/

相关文章:

java - Java中的优先级队列

java - Appletviewer 未从命令提示符运行 : java. security.AccessControlException : access denied (java.net.SocketPermission smtp.gmail.com 解析)

java - 覆盖 AWT 事件调度线程

java - 如何让按钮对鼠标点击使用react

Java Actionlistener 和 getSource()

java - 使用 hashmap 代替 arraylist

java - 第二个按钮对象覆盖第一个(处理)

java - 我需要哪个jar来使用Spring AOP AspectJ Annotation?

java - IcedTea 1.8 版无法打开任何 JNLP 文件

Java无法运行,因为循环外有一个break语句,但我把它放在循环内