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=发帖时出现的一些错误感到非常紧张……但我会注意的……谢谢。能不能给我一个提示,告诉我如何创建一个要点列表?试着看一下(在答案的末尾),谢谢你的帮助。