2012-11-02 53 views
0

我正在構建一個處理截圖的小型Java應用程序。 我有一個自定義的類,它繼承自JPanel,名爲ScreenshotPanel,它保存圖像,它位於JScrollPane中。 ScrollPane在框架大小調整時移動並調整大小。 除縮放部分之外的所有其他效果都很好,我希望能夠控制ScrollPane中的screenshotPanel的大小,但是screenshotPanel不會調整大小,它會以合適的大小閃爍片刻,但隨後它會被調整回到ScrollPane大小。正確調整JScrollPane及其內容的大小

如果我使用不帶ScrollPane的screenshotPanel,它的工作原理是正確的,但我希望它能自動添加滾動條,以便您可以在放大時看到移動圖像。

這裏是我使用來調整代碼的一部分:

double AR=((double)screenshotPanel.getImage().getHeight())/screenshotPanel.getImage().getWidth(); 

    screenshotPanel.setSize((int)((getWidth()-180)*zoomFactor), (int)((AR*(getWidth()-180)-100)*zoomFactor)); 
    scrollPane.setSize(getWidth()-180, (int)(AR*(getWidth()-180))-100); 

-180和-100是用來保持一空間,按鈕和變焦控制其它的組件(其中所有移動和調整完美), zoomFactor是一個保存放大量的雙精度值。

如何在沒有ScrollPane的情況下調整ScrollPane中的screenshotPanel強制其大小?

+0

閃爍從JViewport的或JScrollBars或邊界或其他???引起的,一切都只會有拍攝,沒有SSCCE的黑暗 – mKorbel

+0

問題是你試圖在JLabel中使用ImageIcon,或者你使用BuferrefedImage或scaledInstance(簡單地是異步) – mKorbel

+0

你是對的我應該提到,我使用了一個BufferedImage作爲screenshotPanel的圖像。 – Bob

回答

1

更改組件的大小不會縮放圖像,除非您的繪畫方法中有代碼來補償大小的變化。

JViewPort尊重您的組件的首選大小,因此當您更改大小和視口重置它時,您會得到此閃爍。

scale方法添加到面板並覆蓋getPreferredSize方法。

當您致電setScale時,計算新的縮放大小。確保getPreferredSize方法返回這些值。

您將需要致電invalidate,並可能需要repaint以確保更改通過容器層次結構更新。

記住,窗格不會調整它自己的形象,你有責任採取此;)

相關問題