- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编写一个程序,根据给出的指令绘制形状。这是说明。但是,每当我编译时,我都会收到消息
DrawShapes is not abstract and does not override abstract method keyReleased(java.awt.event.KeyEvent) in java.awt.event.KeyListener".
我已经将方法keyReleased
放入程序中,所以我不知道为什么它一直说我没有重写抽象方法keyReleased
。我无法编译该程序,但我也相当确定即使编译了该程序也无法运行。谢谢!
Write a program that will allow the user to draw a shape with a mouse. The shape to draw should be determined by keyPressed event using the following keys: c draws a circle, o draws an oval, r draws a rectangle and l draws a line. The size and placement of the shape should be determined by mousePressed and mouseReleased events. Display the name of the current shape in a JLabel in the SOUTH region of a BorderLayout. The initial shape should default to a circle. Make sure the shape displays in the direction of the movement of the mouse. Use JFrame and Paint . You should have two files: ShapesViewer and DrawShapes (20 points)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.awt.geom.Ellipse2D;
import java.awt.event.KeyEvent;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class DrawShapes extends JFrame implements KeyListener{
String key;
public DrawShapes()
{
this.setSize(300, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(new PaintSurface(), BorderLayout.CENTER);
this.setVisible(true);
}
private class PaintSurface extends JComponent
{
ArrayList<Shape> shapes = new ArrayList<Shape>();
Point startDrag, endDrag;
public PaintSurface() {
this.addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent e) {
startDrag = new Point(e.getX(), e.getY());
endDrag = startDrag;
repaint();
}
public void mouseReleased(MouseEvent e) {
Shape r;
if (key.equals("l"))
{
r = makeLine(startDrag.x, startDrag.y, endDrag.x, endDrag.y);
}
if (key.equals("o"))
{
r = makeOval(startDrag.x, startDrag.y, endDrag.x, endDrag.y);
}
if (key.equals("r"))
{
r = makeRectangle(startDrag.x, startDrag.y, endDrag.x, endDrag.y);
}
else
{
r = makeCircle(startDrag.x, startDrag.y, endDrag.x, endDrag.y);
}
shapes.add(r);
startDrag = null;
endDrag = null;
repaint();
}
});
this.addMouseMotionListener(new MouseMotionAdapter()
{
public void mouseDragged(MouseEvent e) {
endDrag = new Point(e.getX(), e.getY());
repaint();
}
});
}
private void paintBackground(Graphics2D g2){
g2.setPaint(Color.LIGHT_GRAY);
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
for (Shape s : shapes)
{
g2.setPaint(Color.BLACK);
g2.draw(s);
g2.fill(s);
}
if (startDrag != null && endDrag != null) {
g2.setPaint(Color.LIGHT_GRAY);
Shape r;
if (key.equals("l"))
{
r = makeLine(startDrag.x, startDrag.y, endDrag.x, endDrag.y);
}
if (key.equals("o"))
{
r = makeOval(startDrag.x, startDrag.y, endDrag.x, endDrag.y);
}
if (key.equals("r"))
{
r = makeRectangle(startDrag.x, startDrag.y, endDrag.x, endDrag.y);
}
else
{
r = makeCircle(startDrag.x, startDrag.y, endDrag.x, endDrag.y);
}
g2.draw(r);
}
}
private Rectangle2D.Float makeRectangle(int x1, int y1, int x2, int y2)
{
return new Rectangle2D.Float(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1 - x2), Math.abs(y1 - y2));
}
private Ellipse2D.Float makeCircle(int cx1, int cy1, int cx2, int cy2)
{
return new Ellipse2D.Float(Math.min(cx1, cx2), Math.min(cy1, cy2), Math.abs(cx1 - cx2), Math.abs(cx1 - cx2));
}
private Ellipse2D.Float makeOval(int ox1, int oy1, int ox2, int oy2)
{
return new Ellipse2D.Float(Math.min(ox1, ox2), Math.min(oy1, oy2), Math.abs(ox1 - ox2), Math.abs(oy1 - oy2));
}
private Line2D.Float makeLine(int lx1, int ly1, int lx2, int ly2)
{
return new Line2D.Float(Math.min(lx1, lx2), Math.min(ly1, ly2), Math.abs(lx1 - lx2), Math.abs(ly1 - ly2));
}
public void keyPressed(KeyEvent event)
{
key = event.getKeyText(event.getKeyCode());
}
public void keyReleased(KeyEvent event)
{
}
//handle press of any action key
public void keyTyped(KeyEvent event)
{
}
}
}
……
import javax.swing.*;
public class ShapeViewer
{
//Creates and displays the application frame
public static void main(String[] args)
{
JFrame ShapeViewer = new JFrame("Draw Stuff");
ShapeViewer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ShapeViewer.getContentPane().add(new DrawShapes());
ShapeViewer.pack();
ShapeViewer.setVisible(true);
}
}
最佳答案
是的,但是这不是在DrawShape类中,而是在它的私有(private)内部类PaintSurface中。将该方法移至 DrawShape 类中。
关于java - 编译器错误说我不重写抽象方法 keyReleased,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30297879/
我在创建此类时收到两个错误。第一个出现在: public class DisplayerDeluxe extends JPanel implements ActionListener, KeyList
如果两个 jtextfield 为空或不为空,我将使用 keyReleased 来启用或禁用 jbutton。我在方法中放置了一些打印行语句,以在方法执行时查看 boolean 值。这些语句从未打印,
编写一个程序,根据给出的指令绘制形状。这是说明。但是,每当我编译时,我都会收到消息 DrawShapes is not abstract and does not override abstract
我在捕获关键发布事件以阻止我的角色在我的游戏中行走时遇到了一点问题.. 我正在尝试这样做: switch (xev.type) { case Expose: {
我试图让我的角色左右移动,然后当你将手指从左或右箭头键上移开时停止,但不断发生的事情是他继续前进。这是我的按键: public void keyPressed(KeyEvent e) {
我正在尝试用java制作一个游戏,只是一个简单的平台游戏,但运行代码时遇到困难。我似乎无法从按键中得到任何响应。我认为唯一不能正常工作的是 keyPressed 和 keyReleased 函数。下面
我正在使用 JComboBox 从 SQL DB 中搜索查询。我想在输入字母时搜索查询。我正在使用 NetBeans IDE。这是自动代码。 srch.addKeyListener(new java.
我正在尝试制作两个能够在所有 4 个方向上移动的对象(向上、向下、向右、向左)。第一个对象应使用 W、S、D、A 控制 - 而第二个对象应使用向上、向下、向右、向左箭头控制,并且可以正常工作。 但是,
我正在使用 Java 制作 2D 游戏,并且有一个关键监听器来处理玩家 Action 和其他内容。大多数时候它工作得很好。然而,有时它会出现故障。例如,我将按住“A”键使角色向左移动,当我松开它时,角
正如标题所说,KeyRelease 事件在 Mac OS X 上的全屏模式下根本不会被触发(尚未测试 Linux/Windows,也可能被破坏)。 代码如下: sf::ContextSettings
当用户按下四个箭头键(或 wasd)时,我试图让角色在一个简单的框架上移动。只要按住箭头键,角色就应该继续移动,一旦用户释放按键,角色就应该停止移动。 在很大程度上,这是令人感动的。然而,当快速切换方
所以,我正在使用 swing,我需要找到一个干净的(非 CPU 占用方式)来在文本字段上引入延迟。基本上,用户将在该字段中输入一个数字,keyReleased() 事件会检查输入是否符合一些参数,然后
我想记录所有传入的按键事件,无论哪个窗口处于焦点或指针在哪里。我已经编写了示例代码,它应该捕获当前窗口的按键事件(见下文)。为了保持我的代码可读性,我只给出了焦点窗口的示例代码。由于我的最终目标是捕捉
我想用 python xlib 捕获 keydown 和 keyup 事件,但是当同时按下某些键时,keyup 事件会消失。 如果同时释放 2 个或更多键,则将有 2 个或更多按键事件,但只有 1 个
我正在制作一个简单的电子队列,但遇到了困难。 我想让管理员登录在按下某个键并单击“登录”按钮时弹出(有更好的方法吗?),所以我让该类实现 KeyListener。但是 keyPressed()、key
在 PC 上,我可以为 JTextField 添加 onKeyListener 来监听 keyReleased 事件。在 Android 上,我使用了 addTextChangedListener。
我有一个实现 KeyListener 的 KeyHandler 类。除了左箭头键和右箭头键之外的所有键都可以工作,它们记录为按下但从未释放(向上和向下箭头可以工作,就像所有其他键一样)。键监听器被添加
在下面的代码中,如果我使用 KeyRelease 绑定(bind)事件,那么在点击 return 键时会导致文本小部件中出现不需要的新行。但是,如果我使用 KeyPress 绑定(bind)事件,则不
当我尝试在 Tkinter Text 小部件上使用 KeyRelease 事件时,它有时在 event.char 中提供小写字符,但在文本小部件中显示大写字符。当我轻快地按下 Shift 按钮,然后按
当我按下某个键一段时间后,在 keyReleased 函数中,该键的背景颜色并没有恢复到原来的颜色。我做错了什么。如果您可以将我重定向到某个站点,该站点包含有关如何通过示例制作此类程序的教程,那将非常
我是一名优秀的程序员,十分优秀!