ButtonPress之后在面板上绘制

时间:2019-03-01 20:13:00

标签: java swing

我对这个问题有些困惑,我没有编写太多程序,但是我想在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);
}};

1 个答案:

答案 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);
    }
  }
}