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