每次我最小化并重新打开我的Java窗口时,图形都会发生变化

时间:2015-04-17 22:29:10

标签: java swing

我遇到了一个我完全不知所措的问题。甚至不确定从哪里开始调试问题。

我有一个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个进程为例。

在我最小化窗口之前(这很好):

This is before I minimise the window

这是在我最小化并重新最大化窗口之后

After I minimise and remaximise, i get this result

1 个答案:

答案 0 :(得分:2)

当Swing调用paintComponent()方法时,您无法控制。因此,您永远不应该在paintComponent()方法中更改类的属性。您在paintComponent()方法中操作的所有变量都应该是局部变量。

processes = processes * 50;

您当前的代码正在修改&#34;流程&#34;变量。不要这样做。