Как мне вызвать метод рисования? - PullRequest
0 голосов
/ 19 октября 2018

Привет, я сделал actionlistener, и я хочу вызвать метод paintComponent, когда вы нажимаете кнопку?

Я гуглил, но безуспешно.

Вот actionlisetener,

graf.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    graf();

                }

А вот метод,

public static void paintComponent (Graphics g) {

    int width = Integer.parseInt(xinwindow.getText());
    int hight = Integer.parseInt(yinwindow.getText());

    g.setColor(Color.black);
    g.drawLine((width/2)- 1, 0, (width/2) +1 , hight);


}

Как это назвать?

Буду признателен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Вы должны начать с нескольких примеров для создания GUI.

static для глобального, когда-то существовавшего экземпляра;один на класс.Попробуйте удалить все, только точку входа в программу:

public static void main(String args) {
    JFrame appWindow = new MyFrame();
    SwingUtilities.invokeLater(() -> appWindow->setVisible(true));
}

public class MyFrame extends JFrame {
    private MyPanel panel;
    public MyFrame() {
        panel = new MyPanel();
        add(panel);
        panel.addClickListener(evt -> panel.repaint(50L));
     }
}

public class MyPanel extends JPanel {

     @Override
     public void paintComponent(Graphics g) {
         Graphics2D g2 = (Graphics2D) g;
         g2.setColor(Color.RED);
         g2.drawRectangle(40, 40, getWidth() - 80, getHeight() - 80);
     }
}

Механизм выглядит следующим образом:

  • Клик обрабатывается в потоке диспетчеризации событий свинга.
  • Здесь он говорит repaint о панели за 50 мс.
  • Чуть позже repaintComponent вызывается из свинг-фреймворка в связи со стиранием фона и рисованием дочерних компонентов.

В paintComponent параметр Graphics для всех более новых версий Java на самом деле является Graphics2D, который имеет много хороших методов.

0 голосов
/ 19 октября 2018

Переопределите метод paintComponent объекта JComponent, который вы хотите нарисовать.

JComponent c = new JComponent() {
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        int width = Integer.parseInt(xinwindow.getText());
        int hight = Integer.parseInt(yinwindow.getText());

        g.setColor(Color.black);
        g.drawLine((width/2)- 1, 0, (width/2) +1 , hight);
    }
}

И добавьте

c.revalidate();
c.repaint();

после обработки нажатия в actionPerformed.

...