2
我正在教授自己使用教科書進行Java編程。練習會要求您:使用箭頭鍵繪製線條並在重新繪製每個新線條時添加
編寫一個使用箭頭鍵繪製線段的程序。如圖16.22所示,當按下右箭頭鍵,上箭頭鍵,左箭頭鍵或下箭頭鍵時,線條從框架的中心開始向東,北,西或南方延伸。 C。
圖16.22c顯示了一個框架,其中一條實線沿用戶按下的任一箭頭鍵的方向流動。每按一次方向鍵,該線就會按照箭頭鍵的方向延伸。
我已經得到了繪製一條線的單個迭代,但是當我按下箭頭鍵時,原始線消失並繪製了一條新線。我知道它爲什麼這樣做。我想我知道如何解決它。我正在考慮將每個lint迭代添加到數組中(以及相應的點)。我還沒有做到這一點,因爲它需要重寫至今。
我想我可能會錯過一些關於圖形的知識,可以幫助我在沒有數組的情況下執行任務。如果有更簡單的方法,有人可以向我解釋。
這裏是我到目前爲止的代碼:
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class DrawLinesWithArrowKeys extends JFrame {
DrawLinesPanel panel = new DrawLinesPanel();
/** Constructor */
public DrawLinesWithArrowKeys() {
add(panel);
panel.setFocusable(true);
}
/** Main Method */
public static void main(String[] args) {
JFrame frame = new DrawLinesWithArrowKeys();
frame.setTitle("Draw Lines With Arrow Keys");
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
/** Inner class Draw Lines Panel */
private class DrawLinesPanel extends JPanel {
private int x1Offset = 0;
private int x2Offset = 0;
private int y1Offset = 0;
private int y2Offset = 0;
/* Constructor */
public DrawLinesPanel() {
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP) {
y1Offset = y2Offset;
x1Offset = x2Offset;
y2Offset -= 10;
repaint();
}
else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
y1Offset = y2Offset;
x1Offset = x2Offset;
y2Offset += 10;
repaint();
}
else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
x1Offset = x2Offset;
y1Offset = y2Offset;
x2Offset -= 10;
repaint();
}
else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
x1Offset = x2Offset;
y1Offset = y2Offset;
x2Offset += 10;
repaint();
}
}
});
}
/* Paint line */
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawLine(computeXOne(), computeYOne(), computeXTwo(), computeYTwo());
}
private int computeXOne() {
return (getWidth()/2) + x1Offset;
}
private int computeXTwo() {
return (getWidth()/2) + x2Offset;
}
private int computeYOne() {
return (getHeight()/2) + y1Offset;
}
private int computeYTwo() {
return (getHeight()/2) + y2Offset;
}
}
}