Некорректное отображение переменной - Java

Узнай цену своей работы

Формулировка задачи:

Имеется переменная "q", по нажатию на кнопку ее значение должно увеличиваться на 1 (так и происходит), но также это все должно выводиться на экран с помощью метода paintComponent. Когда я нажимаю на кнопку, то новое значение переменной просто отображается поверх старого и так происходит и далее.
int q;
    public myPanel()
    {
        setLayout(null);
        setFocusable(true);
        Timer timer = new Timer(1,new ActionListener(){
            public void actionPerformed(ActionEvent e){     
                repaint();
            }
        });
            timer.start();
            
            JButton b = new JButton();
            b.setText("+");
            b.setBounds(159, 45, 41, 25);
            b.setFocusable(false);
            b.setBackground(Color.WHITE);
            b.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e) {
                    q+=1;
                }
                
            });
            add(b);
            
            JButton b1 = new JButton();
            b1.setText("-");
            b1.setBounds(159, 75, 41, 25);
            b1.setFocusable(false);
            b1.setBackground(Color.WHITE);
            add(b1);
    }
    public void paintComponent(Graphics gr)
    {
        gr.drawString(String.valueOf(q), 140, 80);
    }

Решение задачи: «Некорректное отображение переменной»

textual
Листинг программы
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
 
public class TestMyPanel extends JFrame {
    private static final long serialVersionUID = 1L;
 
    TestMyPanel() {
        setSize(400, 400);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        add(new MyPanel());
        setVisible(true);
    }
 
    public static void main(String[] args) {
        new TestMyPanel();
    }
 
    private class MyPanel extends JPanel implements ActionListener {
        private static final long serialVersionUID = 1L;
        private JButton plusButton, minusButton;
        int q = 0;
 
        MyPanel() {
            setLayout(null);
            setFocusable(true);
 
            plusButton = new JButton("+");
            plusButton.setBounds(159, 45, 41, 25);
            plusButton.setFocusable(false);
            plusButton.setBackground(Color.WHITE);
            plusButton.addActionListener(this);
 
            minusButton = new JButton("-");
            minusButton.setBounds(159, 75, 41, 25);
            minusButton.setFocusable(false);
            minusButton.setBackground(Color.WHITE);
            minusButton.addActionListener(this);
 
            add(plusButton);
            add(minusButton);
        }
 
        @Override
        public void actionPerformed(ActionEvent evnt) {
            Object source = evnt.getSource();
            if (source == plusButton) {
                q++;
            } else if (source == minusButton) {
                q--;
            }
            // если будет больше кнопок, то может быть не для каждой надо вызывать repaint (просто перенести в каждый иф, где надо перерисовать)
            repaint();
        }
 
        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawString(String.valueOf(q), 140, 80);
        }
 
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.286 из 5
Похожие ответы