Нарисовать линию на игровом поле - Java
Формулировка задачи:
Задание: нарисовать на игровом поле линию(потом переделаю на то что нужно) при клике
Проблема: поле рисую на ура, а вот линия при клике не рисуется...
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;
public class Game extends JFrame{
public static final int n=10;
public static void main() {
JFrame frame=new JFrame("Test");
frame.setSize(305,330);
frame.setVisible(true);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane = new JPanel(){//это рисует
Graphics2D g2;
protected void paintComponent(Graphics g){
super.paintComponent(g);
g2=(Graphics2D)g;
for (int i=0;i<frame.getWidth();i=i+(frame.getWidth()-5)/n)
{
g2.setColor(Color.BLACK);
g2.drawLine(i,0, i, frame.getHeight());
}
for (int i=0;i<frame.getHeight();i=i+(frame.getHeight()-30)/n)
{
g2.setColor(Color.BLACK);
g2.drawLine(0,i, frame.getWidth(),i);
}
}
};
frame.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
System.out.print(e.getX() / 30);
System.out.println((e.getY() / 30) - 1);
JPanel X = new JPanel(){//а вот это нет
Graphics2D g2;
protected void paintComponent(Graphics g){
super.paintComponent(g);
g2=(Graphics2D)g;
g2.setColor(Color.RED);
g2.drawLine(100,100,200,200);
}
};
contentPane.add(X);
}
});
frame.setContentPane(contentPane);
}
}Решение задачи: «Нарисовать линию на игровом поле»
textual
Листинг программы
JPanel contentPane = new JPanel(){
Graphics2D g2;
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
g2=(Graphics2D)g;
for (int i=0;i<frame.getWidth();i=i+(frame.getWidth()-5)/n)
{
g2.setColor(Color.BLACK);
g2.drawLine(i,0, i, frame.getHeight());
}
for (int i=0;i<frame.getHeight();i=i+(frame.getHeight()-30)/n)
{
g2.setColor(Color.BLACK);
g2.drawLine(0,i, frame.getWidth(),i);
}
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
lines.add(new Line2D.Float(100, 100, 200, 200));
for (int i = 0; i < lines.size(); i++) {
g2.setColor(Color.red);
g2.draw(lines.get(i));
}
repaint();
}
});
}
};