Rysowanie linii po naciśnięciu przycisku

0

Witam,

Zaznaczam, że jestem kompletnym amatorem jeśli chodzi o Jave ale muszę przygotować projekt do szkoły.
Ogólnie zatrzymałem się na problemie aby rysować linię po naciśnięciu przycisku.
Nie wiem czy trzeba to utworzyć w osobnej klasie oraz jak wywołać tą metodę ponieważ standardowe

Skrócony kod, tak aby było widać stukturę:

public class form extends javax.swing.JFrame {
    public form() {
        initComponents();
    } 
    public void blokuj(int pole, boolean YES_OR_NO) {
    }
    public void lblchange(int zmiana_litery) {
    }
    public void paintComponent(Graphics g)
    {
          g.drawLine(10, 20, 300, 310); //w taki sposób rysuję linię
    }
    private void rysujActionPerformed(java.awt.event.ActionEvent evt) {                                      
     //chciałbym aby po nacisięicu tego przycisku wywoływała się metoda paint.

    }                
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new form().setVisible(true);
            }
        });
    }                
0

A gdzie button i actionListener ?

Object src = e.getSource();
if(src==button){
paintComponent();
}
chyba tak

0

Nie potrafię się odnieść do tego co znalazłem na forum.
Nie potrafię "wyłuskać" tych niezbędnych informacji do wywołania tego przycisku.

Czy ktoś mógłby mi napisać krótki kod programu w którym będzie tylko przycisk który narysuje linie:

    public void paintComponent(Graphics g)
    {
          g.drawLine(10, 20, 300, 310);
    }

Inaczej chyba tego nie zrozumiem.

Byłbym bardzo wdzięczny.

0

import java.awt.;
import java.awt.event.
;
import javax.swing.*;

public class Linia extends JFrame implements ActionListener
{
private boolean rysuj=false;
//------------------------
public static void main(String[] args)
{
java.awt.EventQueue.invokeLater(new Runnable() {

        public void run()
        {
            new Linia().setVisible(true);
        }
    });
}
//------------------------
public Linia()
{
    PanelRysowania panel = new PanelRysowania();
    add(panel,BorderLayout.CENTER);

    JPanel buttons = new JPanel();
    JButton b = new JButton("Rysowanie");
    b.addActionListener(this);
    buttons.add(b);
    b = new JButton("Sprzątanie");
    b.addActionListener(this);
    buttons.add(b);
    add(buttons,BorderLayout.SOUTH);

    pack();
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(false);
}
//-------------------------
public void actionPerformed(ActionEvent ae)
{
    rysuj=!rysuj;
    repaint();
}
//------------------------
class PanelRysowania extends JPanel
{
    public PanelRysowania()
    {
        setPreferredSize(new Dimension(400,400));
    }
    //------------------------
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        if(rysuj)
        {
            g.drawLine(10, 20, 300, 310);
        }
    }
}

}

0

Dzięki @bo z odpowiedź.
Zawsze jest tak, ze jak napisze post z lamentami na forum to za parę minut lub godzin samemu udaje mi się rozwiązać problem

public void actionPerformed(ActionEvent e) { 
        Graphics g = getGraphics();
        g.drawLine(10, 20, 300, 310);
} 

O dziwo wystarcza takie coś aby narysować linie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0