Java 如何使用箭头键绘制直线(线段)?
我正在尝试解决一个关于使用箭头键画线的练习。当按下其中一个箭头键时,该线从中心开始向东、西、北或南绘制。代码只在东或西方向工作,不在北或南方向工作,这是我的问题 有人能给我一个关于这件事的想法吗?谢谢 代码如下:Java 如何使用箭头键绘制直线(线段)?,java,swing,user-interface,Java,Swing,User Interface,我正在尝试解决一个关于使用箭头键画线的练习。当按下其中一个箭头键时,该线从中心开始向东、西、北或南绘制。代码只在东或西方向工作,不在北或南方向工作,这是我的问题 有人能给我一个关于这件事的想法吗?谢谢 代码如下: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class DrawingLinesUsingTheArrowKeys extends JFrame { // Create a
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);
}
}
}
您的第一个错误是使用
键侦听器KeyListener
仅在组件注册到可聚焦且具有焦点时才会响应键事件
第二个错误是没有使用rowkeys为行提供大小提示,因此布局管理器对组件应该有多大有一些概念
你的第三个错误是假设秋千中的绘画是受指责的,而事实并非如此。挥杆作画是破坏性的。也就是说,每次调用paintComponent
,期望Graphics
上下文将被清除,需要绘制的内容将完全重新生成
看看:
- …因为每个想在秋千上作画的人都应该知道这是怎么回事
基本上,更好的解决方案是有一个点的列表
,paintComponent
将在它们之间生成一条线
,甚至可能是某种多边形
或形状
。然后,您只需根据需要将一个新的点
添加到此列表
,然后重新绘制组件我想在您继续之前,您可能想了解Java和JavaScriptok之间的区别……我对pbm+new in Java=发帖时出现的一些错误感到非常紧张……但我会注意的……谢谢。能不能给我一个提示,告诉我如何创建一个要点列表?试着看一下(在答案的末尾),谢谢你的帮助。