【发布时间】:2015-04-26 05:03:00
【问题描述】:
这个问题解释了它,无论我做什么,我都无法修改我的布尔字段。以下代码是我正在做的作业中的一个类,但我需要能够修改布尔值才能做到这一点,由于某种原因我不能这样做,所以我不确定发生了什么:
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Rectangle2D;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
@SuppressWarnings("serial")
public class Test extends JPanel implements ActionListener {
private String senderName,reciverName,message;
private int w=250,velx=13,x=330,senderW=350,senderH=100,reciverW=350,reciverH=270,messageW=350,messageH=50;
private Timer tm = new Timer(50, this);
private boolean something=true;
public void setSomething(boolean s){
something=s;
}
public Test(String s1,String s2, String s3){
String cutString1 = s1.substring(0, Math.min(15, s1.length()));
String cutString2 = s2.substring(0, Math.min(15, s2.length()));
String cutString3 = s3.substring(0, Math.min(30, s3.length()));
senderName=cutString1;
reciverName=cutString2;
message=cutString3;
setSomething(false);
//Even though I set it to false it still holds true and won't print it out
if(something=false){
System.out.print("Something");
}
setLayout(null);
timer();
}
public void timer(){
tm.setInitialDelay(10000);
tm.start();
}
public void paintComponent(Graphics g){
setOpaque(true);
super.paintComponent(g);
Font font1 = new Font( "TimesRoman", Font.BOLD, 17);
Font font2 = new Font( "TimesRoman", Font.BOLD, 30);
g.setColor(Color.CYAN);
g.fillRect(330, 30, 250, 390);
g.setFont(font1);
g.setColor(Color.BLUE);
g.drawString(message, messageW, messageH);
g.setColor(Color.RED);
g.fillRect(x, 30, w, 390);
g.setColor(Color.BLUE);
g.setFont(font2);
g.drawString(senderName, senderW, senderH);
g.drawString("To",430, 200);
g.drawString(reciverName, reciverW, reciverH);
}
public void anime(){
w=w-velx;
repaint();
}
public void actionPerformed(ActionEvent e){
anime();
}
public static void main(String[] args){
JFrame frame2 = new JFrame();
frame2.add(new Test("something","something","something"));
frame2.setTitle("Title");
frame2.setSize(700,500);
frame2.setResizable(true);
frame2.setLocationRelativeTo(null);
frame2.setVisible(true);
}
}
【问题讨论】:
-
您的问题中有很多不必要且完全不相关的代码,例如与您的问题无关的所有 Swing 代码。它真的可以而且应该用最多 10 行可编译和可运行的代码来询问。以后请大家多多体谅这里的志愿者,尽量让大家更容易的看懂你的代码,然后回答你的问题。有关这方面的更多信息,请查看:minimal example program.
-
试试
if(!something)或if(something == false)== 是比较,而= 是赋值!相当于没有。所以 !true 会(不是真的)那么假。在您的if(something = false)中,您实际上是在设置或分配 false 给某些东西,所以在该语句之后某些东西将是 false 并且 if 将永远不会被执行。 -
@HovercraftFullOfEels 我提供了所有代码,因为问题可能与与布尔值无关的其他事情有关,我试图像其他人提到的那样提供尽可能多的信息.
-
我的建议是,在来到这里之前,您可以缩减代码以尝试隔离您的错误。这当然不是要求太多的努力,因为你要求志愿者付出努力。新手提问者的其他要点:专注于正确的代码格式,因为这也将使您的代码更易于阅读和理解。您当前的格式有点偏离过多的空白行和非常规缩进。我们将非常感谢您在这方面的努力。
-
@HovercraftFullOfEels 好的,不过有一个问题,所以在这种情况下,我应该提供我的完整代码(我上面的测试类)以及隔离错误?