Некорректное отображение переменной - 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);
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д