从不同的类调用时,Java repaint() 不起作用

罗希特·维什瓦吉斯

我的重绘在同一个类中调用时有效,但在另一个类中无效。我一直无法在其他地方找到这个问题。我把我的代码放在下面。谢谢!该代码用于在带有 2 个 JPanel 的 JFrame 中制作一个计算器,一个显示用户的输入,一个显示所有按钮。我想调用 repaint 以便 drawString() 方法随着用户输入而改变。

public class Calculator
{
    public static void main(String[] args)
    {
        Calculator c = new Calculator();
    }

    public Calculator()
    {
        JFrame frame = new JFrame("Calculator");
        frame.setSize(800,  800);
        frame.setResizable(false);
        Buttons b = new Buttons();
        Display d = new Display();
        frame.setLayout(new GridLayout(2, 1));
        frame.add(d);
        frame.add(b);
        frame.setVisible(true);
    }

    public class Buttons extends JPanel implements ActionListener
    {
        private int z;
        public JButton[] buttons;
        public Display d;`enter code here`
        public String[] values;
        public String clickedButton;

        public Buttons()
        {
            setBackground(Color.BLACK);
            setLayout(new GridLayout(5, 4));
            values = new String[100];
            for(int i = 0; i < values.length; i++)
            {
                values[i] = new String("");
            }
            addButtons();
        }

        public void addButtons()
        {
            Font courier = new Font("Courier", Font.BOLD, 20);
            buttons = new JButton[20];

            for(int i = 0; i < buttons.length; i++)
            {
                buttons[i] = new JButton(Integer.toString(i));
                buttons[i].setBackground(Color.BLUE);
                buttons[i].setForeground(Color.WHITE);
                buttons[i].setFont(courier);
                buttons[i].setFocusable(false);
                buttons[i].addActionListener(this);
                buttons[i].setBorder(BorderFactory.createLineBorder(new Color(0, 100, 175, 255)));
                add(buttons[i]);
            }

            buttons[10].setVisible(false);
            buttons[10].setEnabled(false);
            buttons[11].setVisible(false);
            buttons[11].setEnabled(false);

            buttons[12].setText("C");
            buttons[13].setText("+");
            buttons[14].setText("-");
            buttons[15].setText("*");
            buttons[16].setText("/");

            buttons[17].setText("+/-");
            buttons[18].setText("^");
            buttons[19].setText("=");
        }

        public void actionPerformed(ActionEvent e)
        {
            String action = e.getActionCommand();
            d = new Display();
            for(int i = 0; i < 10; i++)
            {
                if(action.equals(Integer.toString(i)))
                {
                    values[d.i]+=Integer.toString(i);
                    System.out.println("should be repainting");
                    d.repaint();
                }
            }
        }
    }

    public class Display extends JPanel
    {
        public Buttons b;
        public Font courier;
        public int i;

        public Display()
        {
            i = 0;
            b = new Buttons();
            setBackground(Color.BLACK);
            courier = new Font("Courier", Font.BOLD, 50);
        }

        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            g.setColor(Color.BLUE);
            g.setFont(courier);
            g.drawString(b.values[i], 50, 50);
            repaint();
        }
    }
}
马蒂·维尔库宁

您似乎每次都在创建一个新的 Display 并告诉它重绘而不是真实的。将您的Display d变量作为一个字段移动到 Calculator 类中,不要声明新的。

您将原始 Display 对象创建为局部变量,因此无法从其他地方访问它,因此请将此部分改为使用类字段:

Display d = new Display();

此外,这一行actionPerformed正在创建一个新实例,应该删除:

d = new Display();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java repaint()在调用中不起作用

来自分类Dev

Java repaint()在调用中不起作用

来自分类Dev

Repaint()不起作用

来自分类Dev

为什么 draw() 方法中的 repaint() 不起作用(不调用paint())?

来自分类Dev

在 Swing、Java 中向 JPanel 添加更多组件后,Repaint() 不起作用

来自分类Dev

Qt事件或repaint()函数不起作用

来自分类Dev

Swing repaint()在循环或线程中不起作用

来自分类Dev

当lop在循环结束时起作用时,java repaint不能在内部起作用

来自分类Dev

从类中调用时,清除主机不起作用

来自分类Dev

从NSObject调用时,DBRestClient不起作用

来自分类Dev

从BroadcastReceiver调用时,startActivity不起作用

来自分类Dev

从NSObject调用时,DBRestClient不起作用

来自分类Dev

从systemd调用时ssh不起作用

来自分类Dev

从另一个类调用时,Java PropertyChangeListener不起作用

来自分类Dev

从控制器类调用时事务回滚不起作用,但从测试类调用时起作用

来自分类Dev

通过 revalidate() 和 repaint() 更新 Swing 中的 JMenu 不起作用

来自分类Dev

为什么当我想重绘我的画时 repaint() 不起作用?

来自分类Dev

PostgreSQL不同不起作用

来自分类Dev

调用UserControl不起作用

来自分类Dev

<ul>类不起作用

来自分类Dev

GPSTracker类不起作用

来自分类Dev

异常类不起作用

来自分类Dev

查找类不起作用

来自分类Dev

伪类不起作用

来自分类Dev

从单独的类调用函数不起作用

来自分类Dev

如何调用repaint()方法?

来自分类Dev

repaint()不调用paintComponent()

来自分类Dev

如何调用repaint()方法?

来自分类Dev

repaint()不调用paintComponent()

Related 相关文章

热门标签

归档