这是我的代码
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);
}
}
答案 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();
}