[英]Repaint JPanel from actionlistener
我知道如何重繪JPanel存在多種威脅。 我一直在嘗試通過應用revalidate()和repaint()方法(在stackoverflow上找到)從一個動作偵聽器內部重新繪制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);
}
額外的信息: worldpanel是Simulationpanel內部的一個網格,但是我想這沒關系,因為重新繪制可以通過更改按鈕的文本來實現。
編輯:
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步(向右,向左,向上,對角線等)。
如何使其與revalidate / repaint方法一起使用?
干杯
您可以使用如下所示的update(Graphics g)方法:
jPanel.update(jPanel.getGraphics());
為我工作,而無需使用任何Worker或Runnable。
仍然不知道為什么它重新繪制JFrame的Minimum Size,但是它可以工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.