boolean不在图形java上工作

时间:2016-03-11 08:03:37

标签: java

这是我的代码

package javaapplication7;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.*;

import java.awt.Graphics;

import java.awt.Graphics2D;``

import java.util.*;

import java.io.*;

public class JavaApplication7 extends JPanel implements ActionListener{

    JButton j = new JButton();

    boolean drawHello = true;

    boolean drawWorld = false;

   String hello = "Hello";

   String World = "World";


   public JavaApplication7(){

       this.setLayout(new BorderLayout());

        add(j,BorderLayout.NORTH);

    }

    public void actionPerformed(ActionEvent e) {

     boolean drawWorld = true;

      repaint();
}

    protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    if (drawHello)
             g.drawString(hello, 50, 50);

    if (drawWorld)
             g.drawString(World, 70, 70);
}



    public static void main(String[] args) {
        JFrame f = new JFrame("Swing Paint Demo");
        JavaApplication7 j7 = new JavaApplication7();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(250,250);
        f.setVisible(true);
        f.add(j7);
    }

}

3 个答案:

答案 0 :(得分:1)

我想你想要

public void actionPerformed(ActionEvent e) {

  drawWorld = true;
  repaint();
}

如果在方法中重新声明它,则不会更新全局值。

答案 1 :(得分:1)

我不明白您已经定义了Boolean,然后在actionPerformed()中创建了另一个,只需删除Boolean,如下所示:

public void actionPerformed(ActionEvent e) {

drawWorld = true;

  repaint();
}

因为你已经在那里创建了它:

public class JavaApplication7 extends JPanel implements ActionListener{

JButton j = new JButton();

boolean drawHello = true;

boolean drawWorld = false; //<------

同时添加

j.addActionListener(this);

像这样:

public JavaApplication7(){

   this.setLayout(new BorderLayout());
   j.addActionListener(this);
   add(j,BorderLayout.NORTH);

}

答案 2 :(得分:0)

你的代码中有两个错误。

第一个,您要将ActionListener添加到JButton,否则您将永远不会执行actionPerformed方法。(我只是猜测您希望在按钮)。

public JavaApplication7() {
    this.setLayout(new BorderLayout());

    add(j, BorderLayout.NORTH);
    j.addActionListener(this);
}

第二个是你在actionPerformed方法中使用局部变量,删除那里的类型标识符以分配类变量。否则,您只会将局部变量drawWorld设置为true,这不会更改类变量drawWorld的初始值。在这种情况下,paintComponent不会通知&#34;更改&#34;您已完成变量darwWorld,因为您从未将其重新指定为true

public void actionPerformed(ActionEvent e) {
    drawWorld = true;
    repaint();
}