<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Swing


    天行健 君子以自強不息

    posts - 69, comments - 215, trackbacks - 0, articles - 16
       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    setXORMode的用法 轉載不一定正確

    Posted on 2007-08-09 11:17 zht 閱讀(2314) 評論(0)  編輯  收藏 所屬分類: Swing


    在一個JPanel上的畫圖函數:
       void draw(Graphics g,int x, int y, Color color){
            g.setColor(color);
            //g.setXORMode(color);   //加上就畫不出圓
            g.fillOval(x,y,20,20);
       }
    單擊事件:
      public void mouseClicked(MouseEvent event){
           g  = getGraphics(); 
           draw(g,event.getX(),event.getY(),Color.black);
      }
    我想單擊鼠標畫一個圓,再單擊一次擦去。可是在draw函數中若加上g.setXORMode(color);就畫不出圓來,注釋掉則能正常作圖,請問這是怎么回事??

    -------------------------------------
    XOR 異或

    ------------------------------------
    setXORMode()方法設置繪圖模式可以使一個新的對象一異或操作的方式加入窗口中
    他指定了繪制對象時戶窗口進行異或操作的顏色。

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;

    public class DrawsDemo{

    public static void main(String[] args){

    ShapesFrame sf=new ShapesFrame();

    }




    }


    class ShapesFrame extends JFrame{

    public ShapesFrame(){
    setTitle("請教setXORMode的用法");
    setSize(300,200);
    XORPanel xp=new XORPanel();
    Container container=getContentPane();
    container.add(xp);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);

    }

    }


    class XORPanel extends JPanel{
    static boolean flag=false;
    public XORPanel(){
    addMouseListener( new MouseAdapter(){
    public void mouseClicked(MouseEvent mevent){

    repaint();
    }
    }
    );

    }


    public void paintComponent(Graphics g){
    super.paintComponent(g);
    g.setColor(Color.red);
    if(!flag){
    g.setXORMode(Color.blue);   //加上就畫不出圓
    }
    flag=!flag;
            g.fillOval(10,10,20,20);

    //draw(g,10,10,Color.blue);

    }

       void draw(Graphics g,int x, int y, Color color){

       }


    }


    -------------------------------------
    樓主,冷月的代碼可以劃出圖來,并且通過點擊鼠標可以進行紅色與藍色的轉換。如果要實現你所要求的功能“單擊鼠標畫一個圓,再單擊一次擦去”,可以將冷月的public void paintComponent(Graphics g)方法中的代碼改為以下形式:
    public void paintComponent(Graphics g)
            {
              super.paintComponent(g);
              g.setColor(Color.red);
              g.fillOval(10, 10, 200, 200);//*
              if (!flag)
              {
                g.clearRect(10, 10, 200, 200);//*
              }
              flag = !flag;
            }

     

    ----------------------------------------------------

    呵,冷月兄的代碼是對的
    一行一行對過去,終于發現,自己把paintComponent的p敲成P了。難怪死活不執行,當即吐血數升

    最后有一點不明白:我理解的setXORMode(color)應該是把指定的color與要繪圖的區域內的顏色進行異或操作。即:
    如區域內無顏色,應能繪出指定顏色的圖形。
    如區域內已存在指定顏色,異或操作后應擦去指定顏色的圖形
    如區域內內已存在其它顏色,應繪制出該顏色和指定顏色進行異或操作后的新顏色的圖形。

    可程序運行結果是:如果區域內無顏色,無法繪制出圖形.是不是我理解的有問題?
    文檔對setXORMode的說明是:

    Sets the paint mode of this graphics context to alternate between this graphics context's current color and the new specified color
    讓圖形上下文的繪圖模式在其原有顏色與指定的新顏色間進行轉換

    也沒有說當不存在原有顏色時就繪不出圖形來啊

    ---------------------------------------------------------
    CoffeeMachine(TwoBeds)兄說的對的,我對java圖形也沒怎么研究過,但是對setXormode的理解
    和你稍微有點不同,我也認為setXormode可以搽去圖形,但是
    g.setColor(Color.blue);
    g.setXORMode(Color.blue);  
    兩句話每次都執行的話,藍色和藍色xor就沒了,什么也顯示不出來了,其實 xor是發生作用的,
    但要有個開關變量,第一次讓他不xor,第二次讓他xor,把圖形就xor沒了,
    不信,你把setXormode(這里的顏色換成別的)你可以看到xor后的顏色既不是藍也不是...
    是兩種顏色的疊加。


    不知道對不對,請指教。
    ---------------------------------------
    對的,xor能擦去相同顏色的圖形,能對不同顏色進行疊加。但似乎是繪圖區已繪制某種顏色的情況下用xor才能畫出圖形來。
    記得以前學delphi的時候用異或模式是能在未著色的區域上繪圖的。執行一次繪出指定顏色圖形,再執行一次擦去,方便得很,java好象不太一樣。是不是對未著色的區域進行異或操作時使用的“空”顏色是類似null的概念,任何值與之運算結果都是“空”,所以繪不出圖形?

    java文檔上關于setXORMode的說明我也看不是很明白:

    When drawing operations are performed, pixels which are the current color are changed to the specified color, and vice versa
    執行繪圖操作時當前顏色的象素將變為指定顏色,反之亦然。

    但是若當前顏色為Color.red,setXORMode(Color.blue),繪圖后明明會變成綠色,而不是指定的藍色呀。這文檔寫的是不是有問題了?

    主站蜘蛛池模板: 亚洲高清免费视频| 国产精品极品美女免费观看 | 美女网站在线观看视频免费的 | 美女视频黄视大全视频免费的| 国产三级在线观看免费| 亚洲午夜久久久久久尤物 | 日本一道高清不卡免费| 亚洲国产精品ⅴa在线观看| 日韩免费视频一区| 羞羞网站免费观看| 国产性爱在线观看亚洲黄色一级片| 九九免费久久这里有精品23| 伊人婷婷综合缴情亚洲五月| 秋霞人成在线观看免费视频| 亚洲精品在线免费观看视频| 性色av无码免费一区二区三区| 亚洲国产精品99久久久久久| 亚洲国产黄在线观看| 两个人www免费高清视频| 国产亚洲av片在线观看16女人| 无码日韩精品一区二区免费暖暖| 亚洲国产美女视频| 成年轻人网站色免费看| 在线观看亚洲精品专区| 伊伊人成亚洲综合人网7777| 57pao一国产成视频永久免费| 国产亚洲精品VA片在线播放| 国产大片91精品免费看3| 日本高清免费中文在线看| 国产亚洲精品美女久久久 | 久久免费的精品国产V∧| 伊人久久五月丁香综合中文亚洲| 亚洲欧洲精品成人久久奇米网| 玖玖在线免费视频| 亚洲精品人成网线在线播放va| 久久久久亚洲精品中文字幕| 很黄很黄的网站免费的| 羞羞漫画小舞被黄漫免费| 亚洲一区二区三区日本久久九| 日本黄页网站免费| 84pao强力永久免费高清|