[英]Java not calling component's overloaded paintComponent method
首先,這是創建馬賽克圖像生成器的家庭作業的一部分。 我希望程序在找到圖像時實時重新繪制,並將其放在另一個圖像上(源圖像)。
這是在我的main函數中創建面板的代碼。
最后一塊mypanel.create()是鑲嵌邏輯。
myPanel = new mosiacPanel(sourceFile, sizePercent, pixesize,threads, imageList);
//test.setText(Integer.toString(myPanel.getWidth()));
JFrame frame2 = new JFrame("COS 226 MOSIAC OF AWESOMENESS BY SLUIPMOORD && ELEANORASAURUSS");
myPanel.setVisible( true );
myPanel.repaint();
frame2.add(myPanel);
if(myPanel.getWidth() > menubar.getWidth()){
frame2.setSize(myPanel.getWidth() , myPanel.getHeight() + menubar.getHeight() );
frame2.repaint();
} else {
frame2.setSize(menubar.getWidth() , myPanel.getHeight() + menubar.getHeight() );
}
frame2.setVisible( true );
// myPanel.setLocation(170, 4);
myPanel.create();
Mosaic面板類代碼片段
public void create()
{
ph.createMosiac(imgUrls, this);
}
@Override
protected void paintComponent( Graphics g )
{ super.paintComponent(g);
g.drawImage( imgToPaint, 0, 0, null );
// System.out.println("paint");
}
public void paintTile( BufferedImage img )
{
imgToPaint = img;
this.repaint();
// this.paintComponent(this.getGraphics());
}
我在create Mosaic Function中調用了paintTile函數。
public void createMosiac(List<String> fileNames, mosiacPanel parent)
{
ArrayList<TileImage> srcTiles = new ArrayList<TileImage>();
for( int i = 0; i < fileNames.size(); i++ )
{
srcTiles.add( new TileImage( fileNames.get(i), tileSize ) );
}
for( int y = 0; y <= (this.getHeight() - tileSize); y += tileSize )
{
for( int x = 0; x <= (this.getWidth() - tileSize); x += tileSize )
{
int location = 0;
double dist, high = 2147483647;
for( int i = 0; i < srcTiles.size(); i++ )
{
dist = this.getTileImage(x, y).differance( srcTiles.get(i) );
if( (dist < high) )
{
high = dist;
location = i;
}
}
this.setTileImage( x, y, srcTiles.get(location) );
parent.paintTile(this);
}
}
}
那是我的程序邏輯。 當我在第二個片段// this.paintComponent(this.getGraphics())中取消注釋時; 程序工作,但它重新閃現了一個可怕的閃光,我不是一個醫療賬單,當我在演示場地內的一些其他學生容易發生癲癇發作。
如果我跟蹤了paintComponent函數的跟蹤,它會在程序結束時調用兩次而不是每次重繪。
先感謝您。
我添加了一個你可以復制和運行的源代碼。 選擇要測試的圖像,默認情況下目前不可用,因為你們沒有它
然后一個包含一堆jpg的目錄用它來平鋪它現在還很慢我還需要修復那個Google文檔鏈接到java文件
嘗試在另一個線程中重新繪制。 也許這將解決你的問題。 祝好運! :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.