国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java繪圖 - 如何正確繪圖和出現滾動條

2019-11-17 04:03:24
字體:
來源:轉載
供稿:網友
下面是我認為正確的做法(結合自己的經驗寫的,如果不正確,請大家指正):
我的繪圖控件是JPanel,
出現滾動條的前提,必須讓繪圖控件放在JScrollPane上,
對于JScrollPane的Layout,沒有特殊要求,下面這樣即可:
view plaincopy to clipboardPRint?
jScrollPane1.setViewportView(jPanel1);  
jScrollPane1.setViewportView(jPanel1);
然后,另外維持一個BufferedImage(假設叫image1),各種圖像的處理都是對image1進行。
畫的時候,只需要把image1畫在jPanel1上即可。

下面是如何畫圖:
(1)在生成jPanel1的時候,需要覆蓋paint(Graphics g)方法,在里面把image1畫上去:
view plaincopy to clipboardprint?
jPanel1 = new JPanel(){   
    @Override  
    public void paint(Graphics g) {   
        super.paint(g);   
        if(image1 != null){   
            g.clearRect(0, 0, this.getWidth(), this.getHeight());   
            g.drawImage(image1, 0, 0, null);   
            g.dispose();   
        }   
    }   
};  
jPanel1 = new JPanel(){
@Override
public void paint(Graphics g) {
super.paint(g);
if(image1 != null){
g.clearRect(0, 0, this.getWidth(), this.getHeight());
g.drawImage(image1, 0, 0, null);
g.dispose();
}
}
};
(2)在所有對image1的處理以后,需要調用jPanel1.repaint() → 注:會自己調用paint(Graphics g)方法
    比如在對image1進行放大縮小,或者去掉某些顏色以后,需要調用jPanel1.repaint()

(3)在image1的size有變化的時候,需要調用:

view plaincopy to clipboardprint?
jPanel1.setPreferredSize(new Dimension(image1.getWidth(),image1.getHeight()));   
jPanel1.updateUI();  
jPanel1.setPreferredSize(new Dimension(image1.getWidth(),image1.getHeight()));
jPanel1.updateUI();
這是關鍵!!因為不修改jPanel1的PreferredSize的話,滾動條永遠都出不來!!
注意:
    ①第一次繪制image1時,也應該調用這兩句,因為image1從null變成有值,size當然有變化。
    ②在jPanel1覆蓋的paint(Graphics g)方法里,不要調用這兩句。因為調用jPanel1.updateUI()時,會自動調用repaint(),進而自動調用paint(Graphics g),造成無限循環調用,CPU的占用會非常高。 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 达日县| 宣汉县| 石门县| 溧水县| 南汇区| 枣阳市| 清苑县| 四子王旗| 明星| 门头沟区| 磐石市| 怀柔区| 连江县| 滨海县| 汉中市| 乌鲁木齐市| 罗源县| 穆棱市| 高唐县| 淮南市| 潞西市| 永康市| 高密市| 监利县| 文登市| 六枝特区| 宁武县| 临颍县| 红河县| 广西| 香河县| 连平县| 兴安县| 永昌县| 诏安县| 家居| 彭阳县| 留坝县| 仙游县| 买车| 南乐县|