Надеюсь, приведенный ниже пример покажет вам, как этого добиться.
Здесь класс Drawing
несет ответственность за то, чтобы нарисовать линию.Эта линия предоставляется снаружи.Итак, если линия существует, Drawing
класс ее рисует.В противном случае он пропускает рисование, потому что рисовать нечего.
В этом примере линия передается объекту Drawing
, когда пользователь нажимает кнопку.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Line2D;
public class DrawOnEvent {
public static void main(String[] args) {
Drawing drawing = new Drawing();
JButton button = new JButton("Draw");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
drawing.setLine(new Line2D.Double(10, 100, 80, 200));
drawing.repaint();
}
});
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(drawing, BorderLayout.CENTER);
frame.getContentPane().add(button, BorderLayout.SOUTH);
frame.setBounds(300, 200, 400, 300);
frame.setVisible(true);
}
}
class Drawing extends JPanel {
private Line2D line;
void setLine(Line2D line) {
this.line = line;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (line != null) {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.blue);
g2.setStroke(new BasicStroke(1));
g2.draw(line);
}
}
}