gpt4 book ai didi

java - JPanel 在调整大小时不刷新图形组件

转载 作者:行者123 更新时间:2023-12-01 18:30:24 25 4
gpt4 key购买 nike

该程序应该在 JPanel 中绘制矩形网格。我通过重写其 paintComponent 方法将网格绘制到 JPanel 上,以便每次 JPanel 调整大小时,网格的大小都会更改以适合 的高度JPanel。但是,当我更改 JFrame 的大小时,网格仅按特定间隔调整大小。有没有更好的方法来改变网格的大小?

import java.awt.*;
import java.awt.geom.Rectangle2D;
import javax.swing.*;

class TextFrame extends JPanel
{
int numOfCells = 99;
int cellSize, xOffSet;
Rectangle2D.Float[][] square = new Rectangle2D.Float[numOfCells][numOfCells];

public TextFrame()
{
setSize(400, 400);
}

public void paintComponent(Graphics comp)
{
Graphics2D comp2d = (Graphics2D)comp;

cellSize = (int)getHeight()/numOfCells;
if(getWidth()<=cellSize*numOfCells)
cellSize = getWidth()/numOfCells;
xOffSet = (getWidth()-(cellSize*numOfCells))/2;

Color black = new Color(0,0,0);
Color grey = new Color(128,128,128);
boolean col = true;

for(int i=0; i<square.length; i++)
{
for(int j=0; j<square[i].length; j++)
{
if(col)
comp2d.setPaint(black);
else
comp2d.setPaint(grey);
col = !col;
square[i][j] = new Rectangle2D.Float(xOffSet+j*cellSize, i*cellSize, cellSize, cellSize);
comp2d.fill(square[i][j]);
}
}

}

public static void main(String[] args)
{
JFrame frame = new JFrame("Conway's Game Of Life");
TextFrame life = new TextFrame();
frame.add(life);
frame.setSize(life.getHeight(), life.getWidth());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

最佳答案

间隔的原因是整数运算。更改:

int cellSize, xOffSet;

至:

float cellSize, xOffSet;

此外,更改:

cellSize = (int)getHeight()/numOfCells;

至:

cellSize = getHeight()/(float)numOfCells;

其他一些旁注:

  • 不要更改 paintComponent 的可见性,它被定义为 protected

  • 不要忘记在paintComponent()中添加super.paintComponent(comp);

  • 不要调用setSize(),覆盖面板的getPreferredSize()pack()框架。例如:

    public Dimension getPreferredSize(){return new Dimension(400, 400);}

    然后,在使框架可见之前添加 frame.pack();

  • 尝试使 paintComponent 尽可能快,以获得更好的性能和用户体验。你可以把一些东西移走,只留下绘画逻辑。

关于java - JPanel 在调整大小时不刷新图形组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24481035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com