Vector は, 言ってしまえば List の古い版です.
今わざわざ Vector を( List を使っているコードと混ぜて) 使う意味は無いのではと思います.
「何を見て解決」というなら, 参考にされている記事・コードしかありません.
要は, 線をどうデータとして表現しているか, その表現の中で"消す"というのはどういうことかを理解しているかどうかです.
複数のプラモデルを組み合わせて新しいものを作ろうとするなら, 元のプラモデルの構造を理解している必要があるはずです.
(「理解が及んでいないことは重々承知している」なればこそ)参考にされている記事・コードの理解を進めることをお勧めします.
#追加
リンク先の SimpleDraw02 を Swing 化するとこのような感じでしょうか.
なるべく元の状態を維持しつつ…と思ったのですが, 描画領域は専用クラス(CanvasPanel)にしないと面倒そうでしたので諦め, 各リスナも無名クラス化してしまいました.
java
1//package teratail.q249928;
2
3import java.awt.*;
4import java.awt.event.*;
5import java.util.ArrayList;
6import java.util.List;
7
8import javax.swing.*;
9
101114
15class SegmentInfo {
16
17
18 private int x1, y1;
19
20
21 private int x2, y2;
22
23
24 private Color color;
25
26
27 SegmentInfo(int x1, int y1, int x2, int y2, Color color) {
28 this.x1 = x1;
29 this.y1 = y1;
30 this.x2 = x2;
31 this.y2 = y2;
32 this.color = color;
33 }
34
35
36 void draw(Graphics g) {
37 g.setColor(color);
38 g.drawLine(x1, y1, x2, y2);
39 }
40}
41
42class CanvasPanel extends JPanel {
43
44 private int lx1, ly1, lx2, ly2;
45
46
47 private List<SegmentInfo> data = new ArrayList<SegmentInfo>();
48
49 private Color color = new Color(100,255,100);
50
51 CanvasPanel() {
52 super(null);
53 setBackground(Color.WHITE);
54
55 addMouseListener(new MouseAdapter() {
56 58
59 @Override
60 public void mousePressed(MouseEvent e) {
61 lx1 = lx2 = e.getX();
62 ly1 = ly2 = e.getY();
63 drawXORLine();
64 }
65
66 68
69 @Override
70 public void mouseReleased(MouseEvent e) {
71 drawXORLine();
72 lx2 = e.getX();
73 ly2 = e.getY();
74 data.add(new SegmentInfo(lx1, ly1, lx2, ly2, color));
75 repaint();
76 }
77 });
78
79 addMouseMotionListener(new MouseMotionAdapter() {
80 82
83 @Override
84 public void mouseDragged(MouseEvent e) {
85 drawXORLine();
86 lx2 = e.getX();
87 ly2 = e.getY();
88 drawXORLine();
89 }
90 });
91 }
92
93
94 private void drawXORLine() {
95 // XORモードで仮の線分を描画します。
96 // XORモードで描かれた線分は、再度同じ線分を描画すると消えます。
97 Graphics g = getGraphics();
98 g.setXORMode(getBackground());
99 g.drawLine(lx1, ly1, lx2, ly2);
100 g.dispose();
101 }
102
103
104 @Override
105 public void paintComponent(Graphics g) {
106 super.paintComponent(g);
107 for(SegmentInfo e : data) e.draw(g);
108 }
109
110
111 void clear() {
112 data.clear();
113 repaint();
114 }
115}
116
117public class SimpleDraw02 extends JFrame {
118
119 public SimpleDraw02() {
120 super("SimpleDraw ver 0.2(Swing)");
121 setSize(1000, 1000);
122 setLocationRelativeTo(null);
123
124 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
125 addWindowListener(new WindowAdapter() {
126 @Override
127 public void windowClosing(WindowEvent e) {
128 quit();
129 }
130 });
131
132 CanvasPanel canvas = new CanvasPanel();
133 add(canvas, BorderLayout.CENTER);
134
135 JPanel eastPanel = new JPanel(new FlowLayout());
136 add(eastPanel, BorderLayout.EAST);
137
138 JButton quitButton = new JButton("Quit");
139 quitButton.addActionListener(new ActionListener() {
140
141 @Override
142 public void actionPerformed(ActionEvent e) {
143 quit();
144 }
145 });
146 eastPanel.add(quitButton);
147
148 JButton clearButton = new JButton("Clear");
149 clearButton.addActionListener(new ActionListener() {
150
151 @Override
152 public void actionPerformed(ActionEvent e) {
153 canvas.clear();
154 }
155 });
156 eastPanel.add(clearButton);
157 }
158
159 162
163 void quit() {
164 System.exit(0);
165 }
166
167 171
172 public static void main(String[] args) {
173 new SimpleDraw02().setVisible(true);
174 }
175}
#追加2
リンク先での「線の色を指定できるように」という課題でのヒントにおきまして「『Javaって何ですか?』の章の例題が参考」とありますが, アプレット(AWT)ですので, アプリケーション(Swing)化しました.
色の設定は Choice(AWT) から JComboBox(Swing) に変わりますが, 扱い方(addItem 等)はあえて変えていません.
java
1//package teratail.q249928;
2
3import java.awt.*;
4import java.awt.event.*;
5
6import javax.swing.*;
7
8// Lineクラス
9class Line {
10 Point sp, ep; // 始点と終点
11 Color color; // 色
12
13 // コンストラクタ
14 Line(Point p1, Point p2, Color c) {
15 sp=p1; ep=p2; color=c;
16 }
17 // 描画
18 void draw(Graphics g) {
19 g.setColor(color);
20 g.drawLine(sp.x, sp.y, ep.x, ep.y);
21 }
22}
23
24// JControlPanelクラス
25class JControlPanel extends JPanel implements ActionListener {
26 private JSimpleDrawMain app;
27 // コンストラクタ
28 public JControlPanel(JSimpleDrawMain app) {
29 super(new FlowLayout());
30 this.app = app;
31 JComboBox<String> ch = new JComboBox<>();
32 ch.addItem("Black");
33 ch.addItem("Red");
34 ch.addItem("Blue");
35 ch.addItem("Green");
36 ch.addItem("Yellow");
37 ch.addItem("Gray");
38 ch.addItem("Pink");
39 ch.addActionListener(this);
40 add(ch);
41
42 JButton clearButton = new JButton("Clear");
43 clearButton.addActionListener(this);
44 add(clearButton);
45 }
46 // アクション処理
47 @Override
48 public void actionPerformed(ActionEvent e) {
49 if(e.getSource() instanceof JComboBox) {
50 String arg = (String)((JComboBox<?>)e.getSource()).getSelectedItem();
51 if(arg.equals("Black")) app.color=Color.BLACK;
52 else if(arg.equals("Red")) app.color=Color.RED;
53 else if(arg.equals("Blue")) app.color=Color.BLUE;
54 else if(arg.equals("Green")) app.color=Color.GREEN;
55 else if(arg.equals("Yellow")) app.color=Color.YELLOW;
56 else if(arg.equals("Gray")) app.color=Color.GRAY;
57 else if(arg.equals("Pink")) app.color=Color.PINK;
58 }
59 if(e.getSource() instanceof JButton) {
60 String arg = ((JButton)e.getSource()).getText();
61 if(arg.equals("Clear")) app.clear();
62 }
63 }
64}
65
66// JDrawCanvasクラス
67class JDrawCanvas extends JPanel {
68 private JSimpleDrawMain app;
69 private Point p1, p2; // 描画中の始点と終点
70
71 // コンストラクタ
72 public JDrawCanvas(JSimpleDrawMain app) {
73 super(null);
74 this.app = app;
75 setBackground(Color.WHITE);
76
77 addMouseListener(new MouseAdapter() {
78 // マウスボタンが押された
79 @Override
80 public void mousePressed(MouseEvent e) {
81 Graphics g = getGraphics();
82 g.setXORMode(getBackground());
83 p2 = p1 = new Point(e.getX(), e.getY());
84 g.drawLine(p1.x, p1.y, p2.x, p2.y);
85 g.dispose();
86 }
87
88 // マウスボタンが離された
89 @Override
90 public void mouseReleased(MouseEvent e) {
91 Graphics g = getGraphics();
92 g.setXORMode(getBackground());
93 g.drawLine(p1.x, p1.y, p2.x, p2.y);
94 g.setPaintMode();
95 p2 = new Point(e.getX(), e.getY());
96 if(app.line_num < JSimpleDrawMain.LINEMAX) {
97 app.lines[app.line_num] = new Line(p1, p2, app.color);
98 app.lines[app.line_num++].draw(g);
99 }
100 g.dispose();
101 }
102 });
103
104 addMouseMotionListener(new MouseMotionAdapter() {
105 // マウスがドラッグされた
106 @Override
107 public void mouseDragged(MouseEvent e) {
108 Graphics g = getGraphics();
109 g.setXORMode(getBackground());
110 g.drawLine(p1.x, p1.y, p2.x, p2.y);
111 p2 = new Point(e.getX(), e.getY());
112 g.drawLine(p1.x, p1.y, p2.x, p2.y);
113 g.dispose();
114 }
115 });
116 }
117 // 再描画
118 public void paintComponent(Graphics g) {
119 super.paintComponent(g);
120 for(int i = 0; i < app.line_num; i++)
121 app.lines[i].draw(g);
122 }
123}
124
125public class JSimpleDrawMain extends JPanel {
126 static final int LINEMAX = 100; // 最大線数
127 int line_num; // 現在の線数
128 Line[] lines; // 線データ
129 Color color; // 現在の色
130 JDrawCanvas dc; // 描画キャンバス
131
132 // 初期化
133 public void init() {
134 setBackground(Color.white);
135 line_num = 0;
136 lines = new Line[LINEMAX];
137 color = Color.BLACK;
138 setLayout(new BorderLayout());
139 add(new JControlPanel(this), BorderLayout.SOUTH);
140 add(dc = new JDrawCanvas(this), BorderLayout.CENTER);
141 }
142
143 // メイン
144 public static void main(String[] args) {
145 JFrame f = new JFrame("JSimpleDrawMain");
146 f.setSize(400,300);
147 JSimpleDrawMain a = new JSimpleDrawMain();
148 f.add(a, BorderLayout.CENTER);
149 a.init();
150 f.setVisible(true);
151 }
152
153 // クリア
154 public void clear() {
155 line_num = 0;
156 dc.repaint();
157 }
158}