Java 将变量从一个类传递到paintComponent类

Java 将变量从一个类传递到paintComponent类,java,swing,paintcomponent,Java,Swing,Paintcomponent,我第一次来这里,完全是新手。我的程序中有两个类,第一个类是SwingPaintDemo2,第二个类是MyPanel。MyPanel包含我的paintComponent(Graphics g)方法。在我的第一个类中有一个布尔变量叫做isTrue。我想这样做,如果是真的;然后paintComponent执行g.fillRect(l,w,50,50)。相信我,我一直在谷歌上搜索 import java.awt.*; import javax.swing.*; public class SwingPa

我第一次来这里,完全是新手。我的程序中有两个类,第一个类是SwingPaintDemo2,第二个类是MyPanel。MyPanel包含我的paintComponent(Graphics g)方法。在我的第一个类中有一个布尔变量叫做isTrue。我想这样做,如果是真的;然后paintComponent执行g.fillRect(l,w,50,50)。相信我,我一直在谷歌上搜索

import java.awt.*;
import javax.swing.*;

public class SwingPaintDemo2 extends JComponent {

public static boolean isTrue = true;

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI(); 
        }
    });
}

private static void createAndShowGUI() {

    JFrame f = new JFrame("Swing Paint Demo");
    JPanel MyPanel = new JPanel();
     MyPanel.setBorder(BorderFactory.createEmptyBorder(1000, 1000, 1000, 1000));
     MyPanel.setPreferredSize(new Dimension(250, 200));
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.add(new MyPanel());
    f.pack();
    f.setVisible(true);

}

}

class MyPanel extends JComponent {

public MyPanel() {
    setBorder(BorderFactory.createLineBorder(Color.black));
}

public Dimension getPreferredSize() {
    return new Dimension(250,200);
}

public void paintComponent(Graphics g) {
    super.paintComponent(g); 
    int l = 30;
    int w = 30;

    if (SwingPaintDemo2.isTrue){g.setColor(Color.black); 
  g.fillRect(l, w, 50, 50);}


}  
}
如何将isTrue变量获取到paintComponent类(获取paintComponent类中未找到的变量出错)?提前感谢您的帮助


更新:在做了前面建议的更改后,我刚刚发布了我的最新代码。现在我得到了“找不到符号-变量isTrue”,如果您想访问公共静态变量,请始终使用封闭类的名称引用它(而不是通过重新创建SwingPaintDemo2类的新实例),我们将非常感谢您的帮助:

您应该尽量避免使用静态变量

现在,也许你想声明一个常数,那么你需要声明它
final

public static final boolean isTrue = true;
最后,我还看到一条可疑的线:

if (isTrue=true)
应该是哪一个

if (isTrue)

注意:变量应以小写字母开头。

由于
isTrue
SwingPaintDemo2
类的静态成员,因此无需实例化新对象即
SwingPaintDemo2.isTrue

因此,您的代码将如下所示:

public void paintComponent(Graphics g) {
    super.paintComponent(g); 
    int l = 30;
    int w = 30;
   SwingPaintDemo2 PaintDemo = new SwingPaintDemo2();


    if (SwingPaintDemo2.isTrue == true){
        g.setColor(Color.black); 
        g.fillRect(l, w, 50, 50);
    }


} 

if(SwingPaintDemo2.isTrue=true)
将始终为true,因为您将true赋值给
isTrue
,然后计算
isTrue
的值。你的意思可能是
if(SwingPaintDemo2.isTrue)
thks表示回复、Waqas、guilloum。我尝试了两种建议:if(SwingPaintDemo2.isTrue=true)和if(SwingPaintDemo2.isTrue)。我同意纪尧姆对瓦卡斯建议的修改。不管怎样,我仍然得到“找不到符号-变量isTrue”GuillaumePolet,谢谢,是的,我已经编辑过了@user1894469您使用的是if(SwingPaintDemo2.isTrue==true)还是just if(isTrue==true)?现在我的代码如下:public void paintComponent(Graphics g){super.paintComponent(g);int l=30;int w=30;//SwingPaintDemo2 paintdemo2=new SwingPaintDemo2();//PaintDemo().isWall;//布尔值isWall=true;if(SwingPaintDemo2.isTrue){g.setColor(Color.black);g.fillRect(l,w,50,50);}//绘制文本//g.drawString(“这是我的自定义面板!”,10,20);}永远不要在
paintComponent
SwingPaintDemo2 PaintDemo=new SwingPaintDemo2();
),在之前准备那些
对象,这又是一个错误。我使用static的原因是因为我尝试了很多东西,认为这可能会有所帮助。我不想声明常量(final)因为下一步我将在SwingPaintDemo2类中编写代码,它将决定isTrue是真是假。我已经将'code'if(isTrue=true){g.setColor(Color.black);g.fillRect(l,w,50,50);}替换为'code'if(SwingPaintDemo2.isTrue){g.setColor(Color.black);g.fillRect(l,w,50,50);}我还注释掉了'code'SwingPaintDemo2 PaintDemo=new SwingPaintDemo2();
public void paintComponent(Graphics g) {
    super.paintComponent(g); 
    int l = 30;
    int w = 30;
   SwingPaintDemo2 PaintDemo = new SwingPaintDemo2();


    if (SwingPaintDemo2.isTrue == true){
        g.setColor(Color.black); 
        g.fillRect(l, w, 50, 50);
    }


}