将变量从一个类传递给paintComponent类

时间:2012-12-11 11:08:53

标签: java swing paintcomponent

我第一次来这里和新手。我的程序中有两个类,第一个类是SwingPaintDemo2,第二个类是MyPanel。 MyPanel包含我的paintComponent(Graphics g)方法。我的第一个类中有一个名为isTrue的布尔变量。我想这样做,如果isTrue = true;然后paintComponent执行g.fillRect(l,w,50,50)。相信我,我用Google搜索并用谷歌搜索......

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”,任何帮助将不胜感激,谢谢

2 个答案:

答案 0 :(得分:1)

如果要访问公共静态变量,请始终使用封闭类的名称(而不是通过重新创建SwingPaintDemo2类的新实例)来引用它:

SwingPaintDemo2.isTrue

你应该尽量避免使用静态变量。

现在,也许你想要声明一个常量,然后你需要声明它final

public static final boolean isTrue = true;

最后,我还看到了一条可疑线:

if (isTrue=true)

应该是

if (isTrue)

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

答案 1 :(得分:0)

由于isTrueSwingPaintDemo2类的静态成员,您可以在不实例化新对象即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);
    }


}