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

标签 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

最佳答案

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

processes = processes * 50;

您当前的代码正在修改“processes”变量。不要这样做。

关于java - 每次我最小化并重新打开 Java 窗口时,图形都会发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29710465/

上一篇:java - Lwjgl 3白屏

下一篇:Java 递归迷宫

相关文章:

java - Spring:用于只读事务的单独数据源

java - 如何将 'public int' 合并到 actionPerformed 按钮中?

java - JComboBox 和 JTextFields 不能与 equals() 一起使用

java - 进程运行时在窗口中显示计时器

java - 当多个线程正在访问它时,在非静态方法中使用静态对象是否安全?

java - 为什么我不能在这段代码中使用 Collections.max() 函数? - java

java - 泛型函数调用未在扩展多个接口(interface)的 Java 8 中编译

java - 是否可以去除 JButton 图标上的阴影?

java - 文件编译正确,但 JFrame 未出现

Java - 如何使表单返回值?