gpt4 book ai didi

java - 从 Action 监听器重新绘制 JPanel

转载 作者:行者123 更新时间:2023-12-01 10:37:04 25 4
gpt4 key购买 nike

我知道如何重新绘制 JPanel 存在多种威胁。我一直在尝试通过应用 revalidate() 和 repaint() 方法(如 stackoverflow 中所示)从 Action 监听器内部重新绘制 JPanel。遗憾的是这不起作用。但是当我只是更改按钮的文本时,它正在重新绘制!

public SimulationPanel()
{
//configure panel.....

/* ActionListener */
btnStepsIntoFuture.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0)
{
//Do something
/* refresh grid panel */
worldPanel.createGrid();
simPanel.revalidate(); //= not working
simPanel.repaint(); //= not working
//btnEndSim.setText("End world simulation "); = working
//btnEndSim.setText("End world simulation"); = working
}
});

/* Add components to Simulationpanel */
simPanel.add(buttonsOnTopPanel, BorderLayout.NORTH);
simPanel.add(worldPanel.getWorldPanel(), BorderLayout.CENTER);
simPanel.add(stepsIntoFuturePanel, BorderLayout.SOUTH);
}

额外信息:世界面板是模拟面板内的网格,但我想这并不重要,因为重新绘制是通过更改按钮的文本来进行的。

编辑:

    public void createGrid(){ 
/* Set constraint on GridBagLayout */
GridBagConstraints gbc = new GridBagConstraints();
/* Create world grid with panels */
for (int row = 0; row < SettingsPanel.getNrOfRows(); row++) {
for (int col = 0; col < SettingsPanel.getNrOfColumns(); col++) {
/* Add constraint for correct dimension (row ; column) */
gbc.gridx = col;
gbc.gridy = row;

/* Initialize new cell in world grid */
CellPanel cellPanel = new CellPanel();

/* Draw elements of grid */
drawBackgroundIcons(cellPanel, row, col);
drawBorders(cellPanel, row, col);

worldPanel.add(cellPanel, gbc);
}
}
/* Print overview */
printOverviewOfWorld();
}


/* draw background icon of object */
public void drawBackgroundIcons(CellPanel cellPanel, int row, int col)
{
/* Set person, zombie weapon icon as background image */
if(personArray[row][col] != null)
{
Image img = new ImageIcon(this.getClass().getResource("/resources/"+personArray[row][col].getName()+".png")).getImage();
cellPanel.setImg(img);
}

}

通过更改二维数组中的位置,我让对象在网格上移动 1 步(右、左、上、对角线……)。

如何使其与重新验证/重绘方法一起使用?

干杯

最佳答案

您可以使用如下方法 update(Graphics g) :

jPanel.update(jPanel.getGraphics());

为我工作,无需使用任何 Worker 或 Runnable。

仍然无法弄清楚为什么它会重新绘制 JFrame 的最小大小,但它有效。

关于java - 从 Action 监听器重新绘制 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34623261/

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