我遇到了一个我完全不知所措的问题。甚至不确定从哪里开始调试问题。
我有一个JFrame,它促使用户输入一个数字,假设数字为4.我将这个数字发送到我的绘图组件以创建一个4 x 50的垂直线。所以该行的长度应为200。它是做什么的。
但是,如果我最小化并重新打开窗口,那么4似乎再次乘以50给200.然后再乘以50使得行10,000。
我放置了我的绘图组件代码,希望它有用,因为问题必须存在,但如果需要更多代码,我会很乐意发布。
class mainPanel extends JPanel
{
int processes;
public mainPanel(int x) //the value x is passed from another class, this was the number the user chooses...i.e 4
{
processes = x;
setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 5));
}
public Dimension getPreferredSize() {
return new Dimension (1000, 1000);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
int storedProcesses = processes;
// Draw Title
g.setFont(new Font("TimesRoman", Font.PLAIN, 28));
g.drawString("We place the title here",380,50);
processes = processes * 50;
g.drawLine(100,100,100, processes+100); //Vertical (down) line
//labels for vertical line
g.setFont(new Font("TimesRoman", Font.PLAIN, 20));
int y = 125;
for (int i=1; i<=storedProcesses; i++) //this loop keeps repeating and getting larger for some unknown reason...then its repainting my JFrame
{
g.drawString(String.valueOf(i), 70,y);
y=y+50;
System.out.println("Loop" + storedProcesses); //used for debugging
}
g.drawLine(100,processes+100,1000,processes+100); //Horizontal (across) line
}
}
我附上了一些屏幕截图,以说明以1个进程为例。
在我最小化窗口之前(这很好):
这是在我最小化并重新最大化窗口之后
答案 0 :(得分:2)
当Swing调用paintComponent()方法时,您无法控制。因此,您永远不应该在paintComponent()方法中更改类的属性。您在paintComponent()方法中操作的所有变量都应该是局部变量。
processes = processes * 50;
您当前的代码正在修改&#34;流程&#34;变量。不要这样做。