我決定在鞦韆和自定義繪畫組件的材料中潛入一點點deeeper。 最近幾天,我在StackOverFlow和其他論壇上閱讀了大量文章,API文檔和問題。但是我仍然在理解這個概念時遇到了一些基本問題。自定義JScrollBar-Thumb已繪製,但不移動
我想要做的事:基本上,我想爲我自己的Swing GUI設計一些組件。設計自定義JButton時沒有太多問題。我只是在paint.net中創建一個自定義圖像,創建一個ImageIcon並使JButton.setIcon(ImageIcon),工作正常。同樣的故事,如果我想自定義一個JSlider的拇指。我在這裏找到了一個很有趣的解它只是無視任何默認縮略圖,並在第二步中將「Slider.horizontalThumbIcon」的自定義ImageIcon(使用通過ClassLoader的自定義createImageIcon類)放到UIManger中。
UIManager.getLookAndFeelDefaults().put("Slider.horizontalThumbIcon", new Icon(){
public int getIconHeight() {
return 0;
}
public int getIconWidth() {
return 0;
}
public void paintIcon(Component c, Graphics g, int x, int y) {
//do nothing
}
});
和
UIManager.getLookAndFeelDefaults().put("Slider.horizontalThumbIcon",
createImageIcon("images/slider.png"));
但現在的問題開始。如果我沒有錯,ScrollBar的拇指不是一個圖標,所以我必須創建一個擴展BasicScrollBarUI的自己的「CustomScrollBarUI」類。此外,我不想要任何箭頭鍵。 OK,所以我做了以下(從一些示例代碼再次激勵我從這裏):
public class CustomScrollBarUI extends BasicScrollBarUI {
private ImageIcon img;
protected JButton createZeroButton() {
JButton button = new JButton("zero button");
Dimension zeroDim = new Dimension(0,0);
button.setPreferredSize(zeroDim);
button.setMinimumSize(zeroDim);
button.setMaximumSize(zeroDim);
return button;
}
protected JButton createDecreaseButton(int orientation) {
return createZeroButton();
}
protected JButton createIncreaseButton(int orientation) {
return createZeroButton();
}
protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) {
BufferedImage img = new LoadBackgroundImage("images/slider.png").getImage();
g.drawImage(img, 0, 0, new Color(255,255,255,0), null);
}
protected void setThumbBounds(int x, int y,int width,int height){
super.setThumbBounds(x, y, 14, 14);
}
protected Rectangle getThumbBounds(){
return new Rectangle(super.getThumbBounds().x,super.getThumbBounds().y,14,14);
}
protected Dimension getMinimumThumbSize(){
return new Dimension(14,14);
}
protected Dimension getMaximumThumbSize(){
return new Dimension(14,14);
}
}
的LoadBackGroundImage是自己的類,它通過創建類加載器的BufferedImage。滾動條的拇指現在是我自定義的「slider.png」,但它不移動。如果我把它拖下來,窗格會滾動,但拇指仍然在他的位置。 由於我還沒有理解所有的機制,我讀了關於paintImage方法。你必須提交一個ImageObserver,其功能我不太瞭解。我在網上發現了各種代碼示例(像我這樣做),但我認爲這不適用於必須移動(並重新繪製)的圖像。我該如何解決這個問題?如果我在paintThumb方法中繪製正常的圖形,它可以正常工作,但只要我繪製圖像,它就不會移動。
我希望有人能幫助我。提前致謝。
真棒,非常感謝。當然這很有道理! :)如果你不介意,我可以問別的。在我的具體情況中,我將ScrollPane放在帶測試值的JList上。現在,如果我移動ScrollBar,列表中的字符串不會被正確繪製。查看圖片tp://tinypic.com/r/1195eoj/6。你有什麼想法爲什麼發生這種情況。我認爲,一些repaint() - 調用不正確,稱爲 –
對不起,鏈接是http://tinypic.com/r/1195eoj/6 –
它可能是一些異常拋出內部的渲染器,甚至一些外部繪畫問題名單。我會讓你把這個問題轉移到StackOverflow上的一個單獨的問題線程中,並顯示一些有關該問題的代碼。 –