Рисовать на панели после нажатия кнопки - PullRequest
0 голосов
/ 01 марта 2019

Я немного застрял в этой проблеме, я не слишком много программирую, но я хотел нарисовать что-то на панели в 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 голосов
/ 02 марта 2019

Надеюсь, приведенный ниже пример покажет вам, как этого добиться.

Здесь класс 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);
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...