我对这个问题有些困惑,我没有编写太多程序,但是我想在Java swing中的面板上绘制一些东西(按下按钮后)
我不知道该怎么做,但是我发现,我可以在创建面板时在面板上绘图(请参见代码)
现在,我希望不要在创建时画线,而是在按下按钮后(这样,可以将其放入ButtonActionPerformed方法中的代码会很好。
希望有人能帮忙
罗伯特
jPanel16 = new javax.swing.JPanel() {
public void paintComponent( Graphics g ) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
Line2D line = new Line2D.Double(10, 100, 40, 400);
g2.setColor(Color.blue);
g2.setStroke(new BasicStroke(1));
g2.draw(line);
}};
答案 0 :(得分:1)
我希望下面的示例向您展示如何实现这一目标。
在这里,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);
}
}
}