gpt4 book ai didi

java - 如何使用箭头键绘制线条(线段)?

转载 作者:行者123 更新时间:2023-11-30 04:04:11 27 4
gpt4 key购买 nike

我正在尝试解决有关使用箭头键绘制线条的练习。当按下任一箭头键时,该线从中心开始向东、西、北或南绘制。该代码仅在东或西方向有效,而在北或南方向无效,这是我的问题!!

有人可以给我关于这件事的想法吗?谢谢。

代码如下:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DrawingLinesUsingTheArrowKeys extends JFrame {

// Create a panel
private LinesUsingTheArrowKeys LinesUsingTheArrowKeys = new LinesUsingTheArrowKeys();

public DrawingLinesUsingTheArrowKeys() {

add(LinesUsingTheArrowKeys);

/*
* A component (keyboard) must be focused for its can receive the
* KeyEvent To make a component focusable , set its focusable property
* to true
*/
LinesUsingTheArrowKeys.setFocusable(true);
}

public static void main(String[] args) {
JFrame frame = new DrawingLinesUsingTheArrowKeys();
frame.setTitle("Drawing Lines Using The Arrow Keys");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 200);
frame.setVisible(true);
}

// Inner class: LinesUsingTheArrowKeys (keyboardPanel) for receiving key
// input
static class LinesUsingTheArrowKeys extends JPanel {
private int x = 200;
private int y = 100;
private int x1 = x + 10;
private int y1 = y;

// register listener
public LinesUsingTheArrowKeys() {
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
// x1 += y1;
y1 += 10;

repaint();
} else if (e.getKeyCode() == KeyEvent.VK_UP) {
y1 -= 10;
repaint();
} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
x1 += 10;
repaint();
} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
x1 -= 10;
repaint();
}

}
});
}

// Draw the line(s)
protected void paintComponent(Graphics g) {
super.paintComponent(g);

g.drawLine(x, y, x1, y1);
}
}
}

最佳答案

你的第一个错误是使用 KeyListenerKeyListener仅当组件注册为可聚焦且具有焦点时才会响应按键事件。

您的第二个错误是没有为您的 LinesUsingTheArrowKeys 提供尺寸提示类,因此布局管理器知道您的组件应该有多大。

你的第三个错误是假设 Swing 中的绘画是累积的,但事实并非如此。在 Swing 中绘画具有破坏性。即每次paintComponent被调用,期望是 Graphics上下文将被清除,需要绘制的内容将被完全重新生成。

看一下:

基本上,更好的解决方案是 ListPoint ,其中paintComponent只会生成 Line他们之间,甚至可能是某种 PolygonShape 。然后,您只需添加一个新的 Point对此List根据需要然后重新绘制组件

关于java - 如何使用箭头键绘制线条(线段)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21150672/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com