import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
public class PaintLine
extends JFrame {
private int lineLimit;
private ArrayList<StraightLine> straightLines;
private boolean isNewClick;
private StraightLine tmpStraightLine;
private boolean canDraw;
private DrawingPanel drawingPanel;
public static void main
(String[] args
) { PaintLine paintLine = new PaintLine("直線の描画");
paintLine.setVisible(true);
});
}
lineLimit = 10;
straightLines = new ArrayList<>();
isNewClick = true;
canDraw = true;
setTitle(title);
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation
(JFrame.
EXIT_ON_CLOSE);
drawingPanel = new DrawingPanel();
getContentPane().add(drawingPanel);
}
@Override
if (canDraw) {
if (isNewClick) {
tmpStraightLine = new StraightLine();
tmpStraightLine.setStartPoint(e.getPoint());
isNewClick = false;
} else {
tmpStraightLine.setEndPoint(e.getPoint());
straightLines.add(tmpStraightLine);
tmpStraightLine = null;
isNewClick = true;
drawingPanel.repaint();
}
updateCanDrawState();
}
}
};
public void updateCanDrawState() {
if ((straightLines != null && straightLines.isEmpty()) || straightLines.size() < lineLimit) {
canDraw = true;
} else {
canDraw = false;
}
}
private class DrawingPanel
extends JPanel {
public DrawingPanel() {
setBackground
(Color.
YELLOW); addMouseListener(mouseAdapter);
}
protected void paintComponent
(Graphics g
) { super.paintComponent(g);
g2d.
setColor(Color.
BLUE); if (!canDraw) {
// straightLines.remove(straightLines.size() - 1);
g2d.drawString("もう書けません!", 50, 50);
}
straightLines.stream().forEach(straightLine -> g2d.drawLine(
straightLine.startPoint.x,
straightLine.startPoint.y,
straightLine.endPoint.x,
straightLine.endPoint.y
));
g2d.dispose();
}
}
private class StraightLine {
private Point startPoint
;
public void setStartPoint
(Point startPoint
) { this.startPoint = startPoint;
}
public void setEndPoint
(Point endPoint
) { this.endPoint = endPoint;
}
}
}