Rysowanie na panelu

0

Witam, chciałbym prosić o pomoc przy rysowaniu. W programie są dwa przyciski. Chodzi o to, by przy wywołaniu programu możliwe było, by jednym z nich dorysować do stanu początkowego zmiany, a drugim te zmiany cofnąć. Obecnie odbywa się to w ten sposób, że jeden przycisk rysuje zmiany (ale nie zachowuje stanu początkowego - pewnie przez super.paintComponent(gt)), a drugi rysuje od nowa stan początkowy. Czy jest to w jakiś sposób możliwe? Dodam jeszcze, że jeżeli usunę linię super.paintComponent(gt), to owszem zmiany są nakładane na rysunek pierwotny, ale nie umiem wtedy cofnąć tych zmian. Bardzo dziękuje za pomoc. Poniżej mój kod:

@Override
    public void paintComponent(Graphics gt) {
        
        super.paintComponent(gt);

        int j = 0;
        int k = 0;
        boolean przycisk = isPrzemaluj();

        HSV hsv = new HSV();
        ustaw();
        int[] temp_nacisk = getPkPressure();
        int[] temp_x = null;
        int[] temp_y = null;
        int[] temp_p = null;
        temp_p = getPkPressure();

        if (choice && przemaluj) {
            temp_x = getTabx();
            temp_y = getTaby();
        } else {
            temp_x = getTablicaX();
            temp_y = getTablicaY();
        }

        for (k = 0; k < temp_x.length; k++) {
            if (przemaluj) {
                if (temp_p[k] != 0) {
                    gt.setColor(new Color(hsv.getColor((float) temp_nacisk[k] / 4).x,
                            hsv.getColor((float) temp_nacisk[k] / 4).y,
                            hsv.getColor((float) temp_nacisk[k] / 4).z));

                    gt.drawLine(temp_x[k] / 20, temp_y[k] / 20, temp_x[k] / 20, temp_y[k] / 20);

                    if (choice) {
                        gt.setColor(new Color(0, 0, 0));
                        
                        gt.drawLine(temp_x[k] / 20, temp_y[k] / 20, temp_x[k] / 20, temp_y[k] / 20);
                    }
                }
            } else {                
                if (temp_p[k] != 0) {
                    gt.setColor(new Color(hsv.getColor((float) temp_nacisk[k] / 4).x,
                            hsv.getColor((float) temp_nacisk[k] / 4).y,
                            hsv.getColor((float) temp_nacisk[k] / 4).z));
                    
                    gt.drawLine(temp_x[k] / 20, temp_y[k] / 20, temp_x[k] / 20, temp_y[k] / 20);
                }
            }
        }
    }
class Ramka extends JFrame {

    public Ramka() {
        String[] bufory = {"1", "3", "7", "15", "30", "45", "60", "75", "90", "100"};
        setTitle("Tablet");
        setSize(1000, 800);
        final Tablet panel = new Tablet();
        panel.setBackground(Color.WHITE);
        add(panel);
        panel.setVisible(true);
        JPanel ButtonPanel = new JPanel();
        JButton koryguj = new JButton("Koryguj");
        JButton wyczysc = new JButton("Wyczysc korekte");
        final JComboBox lista = new JComboBox(bufory);
        ButtonPanel.add(wyczysc, BorderLayout.CENTER);
        ButtonPanel.add(koryguj, BorderLayout.CENTER);
        ButtonPanel.add(lista, BorderLayout.CENTER);

        koryguj.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent event) {
                panel.setPrzemaluj(true);
                int index = lista.getSelectedIndex();
                String selected = (String) lista.getItemAt(index);
                int bufor = Integer.parseInt(selected);

                panel.popraw(bufor);
                panel.repaint();
                panel.setVisible(true);
            }
        });

        wyczysc.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent event) {
                panel.setPrzemaluj(false);
                panel.repaint();
            }
        });

        add(ButtonPanel, BorderLayout.SOUTH);
        setVisible(true);
    }
}
0

Już sobie poradziłem. Dla zainteresowanych, wystarczy fragment

super.paintComponent(gt)

przenieść tu:

if (choice && przemaluj) {
            temp_x = getTabx();
            temp_y = getTaby();
        } else {
            temp_x = getTablicaX();
            temp_y = getTablicaY();
            super.paintComponent(g);
        }

Temat do zamknięcia.

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