Ceviz Forum

Geri Dön   Ceviz Forum > Programlama > Java / JSP

Cevapla
 
LinkBack Seçenekler
Eski 16/05/2008, 13:22   #1 (permalink)
Üye
 
Üyelik Tarihi: 05/2008
Mesaj: 3
Varsayılan Image Button

Selamlar,

Epeyce bir ihtimal denedim kaynakları araştırdım kodları çalıştırdım ama tam olarak istediğimi yapan bir şey bulamadım. Belkide istediğim şey yanlışta olabilir.

İstediğim şey bir appletin arkasına backgroudn image koymak(burası gayet basit
ve bu resmin üstüne image buttonlar çizmek(aslında bir oyun yazıyorum ve üstüne taşlar koymak istiyorum). Ama buttonları istediğim x,y koordinatına çizmek istiyorum. Yani add(button1) şeklinde yapmak istemiyorum. Yada add(button) desem bile kendim paint edip mouse clickleri yakalamak istiyorum.

imagebutton örnekleri gördüm fakat hep panelin üstüne add diyerek ekliyorlar. Neden button istiyorum çünkü mouse eventlerini yakalamak istiyorum. Herhangi olabilecek bir başka yöntem varsa onlara da açığım.

Cevaplarınız için şimdiden teşekkürler.
FrostBite hatta değil   Alıntı Yaparak Yanıtla
Eski 16/05/2008, 14:17   #2 (permalink)
Matafleur
 
darky_dark Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 02/2003
Mesaj: 593
Varsayılan

isin sirri layoutlarda yatiyor; su adresteki "Laying Out Components Within a Container" konusunu incelemeni oneririm:
http://java.sun.com/docs/books/tutor...ing/index.html

hatta gorsel gelistirme yapiyorsan bu adresi mutlaka tamamen incelemelisin..

sevgi, saygi..
_DD_
__________________
if u wanna fuck with the eagles
u've gotta learn 2 fly
darky_dark hatta değil   Alıntı Yaparak Yanıtla
Eski 20/05/2008, 13:38   #3 (permalink)
Üye
 
Üyelik Tarihi: 05/2008
Mesaj: 3
Hoş

isin sirri layout seciminde fakat onemli olan o sirri cozmek zaten

Benim yaptigima en uygun olan okudugum kadariyla setLayout(null) yapmak AbsoluteLayout yani. Fakat burda Applet icinde setBounds diyerek classın yerini veriyor. Halbuki classın kendisini çizmesi gerek. Eğer ben applet içinden classın paint metodunu çağırarak çizdirirsem o zamanda mouse eventlerinı yakalamıyorum bir türlü.
FrostBite hatta değil   Alıntı Yaparak Yanıtla
Eski 20/05/2008, 15:48   #4 (permalink)
Üye
 
Üyelik Tarihi: 10/2007
Mesaj: 145
Varsayılan

Benim daha farklı bir önerim var.

MouseListener'i implement eden bir class yeterli olacaktir.

Bu listener'i Oyun appletine veya paneline eklerseniz - addMouseListener()- mouse eventlerini dinleyebiliyor olacaksınız.Applet/Panel üzerinde olusan her event dinlenecektir.

Ancak sadece Cisimciğin üzerine tıkladıgında bundan haberdar olmak istiyorsaniz,

Kod:
class GameObject implements MouseListener{
      Rectangle body;
      GameObject (Rectangle body){
           this.body = body;
      }
      
      /*Mouse Listener methodlarinda...
         Rectangle clickedPixelRect = new Rectangle(event.getX(),event.getY(),1,1);
         if(body.intersects(clickedPixelRect){
               clickedOnObject();
         }
      */
}
şeklinde bir şey aklima geliyor.
__________________
Aklına ve yeteneğine çok güvenme evlat!
Sırrın ardından niceleri gitti de hepsi öldüler.

Ölmeden önce ölmenin sırrına erenlere selamım.
rasit.fidan hatta değil   Alıntı Yaparak Yanıtla
Eski 20/05/2008, 19:39   #5 (permalink)
Üye
 
Üyelik Tarihi: 05/2008
Mesaj: 3
Varsayılan

Rasit dediğini de denedim

RoundButton classım :

Kod:
public class RoundButton extends Component {

    protected MouseListener mouseListener = null;     // Post action events to listeners
    protected boolean pressed = false; // true if the button is detented.
    int spikeOrder;
    int spikeNumber;
    int buttonId;
    Image image;
    int w,h;
  
  boolean clicked;
  //Graphics g;
  
  
  public RoundButton(Image image, int buttonId, int spikeOrder, int spikeNumber) {
      this.buttonId= buttonId;
      this.image = image;
      this.spikeNumber = spikeNumber;
      this.spikeOrder = spikeOrder;
  }
  
  
  public MouseListener getMouseListener() {
    return mouseListener;
  }

  public void setMouseListener(MouseListener mouseListener) {
    this.mouseListener = mouseListener;
  }

  public int getButtonId() {
      return buttonId;
  }

  public void setButtonId(int buttonId) {
    this.buttonId = buttonId;
  }

  public Image getImage() {
    return image;
  }

  public void setImage(Image image) {
    this.image = image;
  }

  public int getSpikeOrder() {
    return spikeOrder;
  }

    public void setSpikeOrder(int spikeOrder) {
        this.spikeOrder = spikeOrder;
    }

    public int getSpikeNumber() {
        return spikeNumber;
    }

    public void setSpikeNumber(int spikeNumber) {
        this.spikeNumber = spikeNumber;
    }

  public void paint(Graphics g) {
      //System.out.println("SN :"+this.spikeNumber+" X : "+findXPosition(this.spikeNumber, this.spikeOrder)+" Y : "+findYPosition(this.spikeNumber, this.spikeOrder));
      //System.out.println(this.getSpikeNumber()+" "+this.getSpikeOrder());
      //Image temp =  getImage();
      g.drawImage(this.getImage() ,findXPosition(this.spikeNumber, this.spikeOrder), findYPosition(this.spikeNumber, this.spikeOrder), this);
      
     //g.drawImage( this.getImage(),0,20, this);
     // g.setColor(Color.black);
      //g.drawLine(0, 0, 1000, 1000);
      super.paint(g);
  }
  
  /**
   * The preferred size of the button. 
   */
  public Dimension getPreferredSize() {
      return new Dimension(46, 44);
  }
  
  /**
   * The minimum size of the button. 
   */
  public Dimension getMinimumSize() {
      return new Dimension(100, 100);
  }
  
  
  
  /**
   * Determine if click was inside round button.
   */
   public boolean contains(int x, int y) {
       int mx = getSize().width/2;
       int my = getSize().height/2;
       return (((mx-x)*(mx-x) + (my-y)*(my-y)) <= mx*mx);
   }
   
   public int findXPosition(int spikeNumber ,int spikeOrder)
   {
           if(spikeNumber<=6)
                   return 420+(53*(6-spikeNumber));
           if(spikeNumber<=12)
                   return 40+(53*(12-spikeNumber));
           if(spikeNumber<=18)
                   return 40+(53*(spikeNumber-13));
           if(spikeNumber<=24)
                   return 420+(53*(spikeNumber-19));
           return -1;
   }

   public int findYPosition(int spikeNumber ,int spikeOrder)
   {
           if(spikeNumber<=12)
                   return 32 + ((spikeOrder-1)*44);
           if(spikeNumber<=24)
                   return 530 -((spikeOrder-1)*44);
           return -1;
   }
   
   
   public void addMouseListener(MouseListener l) {
         mouseListener = AWTEventMulticaster.add(mouseListener, l);
         }
       public void removeAMouseListener(MouseListener l) {
         mouseListener = AWTEventMulticaster.remove(mouseListener, l);
         }
}


Applet classım :

Kod:
public class Tavla extends JApplet {

    static final int neutral = 0;
    static final int white = 1;
    static final int black = 2;
    
    //Color to be used when drawing a white checker
    static final Color clr_white = new Color(200, 200, 200);
    //Color to be used when drawing a black checker
    static final Color clr_black = new Color(50, 50, 50);
    
  //Color to be used when drawing a white spike
    static final Color spike_black = new Color(130, 70, 0);
    //Color to be used when drawing a black spike
    static final Color spike_white = new Color(240, 215, 100);
    
  //When moving, the original position of the checker
    private int old_spike;
    
    Graphics2D g_buffer;
    static final int x_offset = 20;
    static final int y_offset = 60;
    BufferedImage b_bimage;
    static Board board;
    Image boardImg;
    Image whiteMan,blackMan;
    
    Canvas canvas ;
    
    private int used_move = 0;
    /* used_move == 1 means first dice has been used
     * used_move == 2 means second dice has been used
     * used_move == 0 means no die have been used yet
     */

    //The move possible with each dice
    //Positions:
    // 1 - 24 = spikes, 1 being on the beginning of the black quarter
    //-1 = bar
    // 0 = black bear off
    // 25 = white bear off
    private int potmove1, potmove2;
    
    private int current_player = white;
    
    //If there are doublets, how many doublet moves remain
    int doublet_moves;

    //This contains some booleans about the status of the game
    Status status;

    //Class that performs the network operations
    Communication comm = null;

    //Textfield used for typing messages
    TextField msg_input;

    //TextArea used to display messages between the players
    
    TextArea msg_display;

    //Scroll pane to provide scrolling capabilities for messages
    ScrollPane msg_scrollpane;
    
    FixedButton FButton[] = new FixedButton[8];
       
    ExampleMouseListener mouseListener;
    
    
    
    public void start(){
    }
    
    
    public void init(){
               
        setLayout(null);

        whiteMan = getImage(getDocumentBase(),"http://localhost:8080/tavla/beyaz.gif");
        blackMan = getImage(getDocumentBase(),"http://localhost:8080/tavla/siyahh.gif");
        boardImg = getImage(getDocumentBase(),"http://localhost:8080/tavla/board2.jpg");
        
        mouseListener = new ExampleMouseListener();
        try {
            board = new Board(this);
        } catch (Exception e) {
            System.out.println(e);
            e.printStackTrace();
            // TODO: handle exception
        }
        status = new Status();
        status.networked = false;
        
        
        
        for(int i=0;i<30;i++)
        {        
                 RoundButton rb = board.buttons[i];
                 add(rb);
                 rb.addMouseListener(mouseListener);
        }
    }
    
    public void paint(Graphics g)
    {
        //drawBoard(g);
        drawMen(g);
    }


private void drawMen(Graphics g2){
        for (int i = 0; i < 30; i++) {
                     RoundButton rb = board.buttons[i];
                     rb.paint(g2);
        }    
}


class ExampleMouseListener implements MouseListener {
         
        public ExampleMouseListener() {
        }
      
        public void mouseClicked(MouseEvent e) {
            // TODO Auto-generated method stub
            System.out.println("FATIH");
            
        }

        public void mouseEntered(MouseEvent e) {
            // TODO Auto-generated method stub
            
        }

        public void mouseExited(MouseEvent e) {
            // TODO Auto-generated method stub
            
        }

        public void mousePressed(MouseEvent e) {
            // TODO Auto-generated method stub
            
        }

        public void mouseReleased(MouseEvent e) {
            // TODO Auto-generated method stub
            
        }

        public void actionPerformed(ActionEvent e) {
            
            System.out.println("Button Pressed: " + e.getActionCommand());
        }
    }
Ama appletin icinden draw edersem clickleri bir türlü yakalatamıyorum RoundButtonun kendi paint methodu çağırması içinde illaki add(rb) ile birlikte layout kullanmak gerekiyor. o zaman setbound kullanmak gerekiyor. yani bi taraf olsa bi taraf olmuyor
FrostBite hatta değil   Alıntı Yaparak Yanıtla
Eski 21/05/2008, 09:34   #6 (permalink)
Üye
 
Üyelik Tarihi: 10/2007
Mesaj: 145
Varsayılan

Tam olarak o değil...

Söyledigim yöntemde Layoutlara bulasmayacaksin.
Çözümü Layoutla da yapilabilecektir tabi ama benim söyledigim layoutsuz olan yöntemi.Layout'a bulasmiyoruz...

Tarif ediyorum;

1-GameEnvorienment diye bir classimiz olsun bu oyun ortamindaki tüm nesneleri bir collectionda tutsun.

2-GameObject diye ata class yarat.Bu classi extend eden diger classlarin ortak özellikleri ,mouse 'i dinlemek (yani birer mouse Listener implemantasyonu) , kendi kendilerini cizmeleri (draw(Graphics g); ) gerekiyor.

3-GameEnvorienment ise tüm nesneleri paint metodunda cizen(draw metotlarini cagiran) bir Panel yada Appletin kendisi olacak.
__________________
Aklına ve yeteneğine çok güvenme evlat!
Sırrın ardından niceleri gitti de hepsi öldüler.

Ölmeden önce ölmenin sırrına erenlere selamım.
rasit.fidan hatta değil   Alıntı Yaparak Yanıtla
Cevapla

Bookmarks

Seçenekler

Mesaj Yazma Hakları
Yeni mesajgöndermezsiniz
Cevap yazamazsınız
Dosya ekleyemezsiniz
Mesajınızı düzenleyemezsiniz

BB code is Açık
[IMG] kodu Açık
HTML kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık

Benzer Konular
Konu Konuyu açana göre Forum Cevap En Son Mesaj
AJAX ile Resim Yenileme [Image Refresh - Image Verification] Nickolas Javascript / DHTML / Ajax 6 19/06/2008 17:19
radio button the lizard king Javascript / DHTML / Ajax 0 06/01/2008 17:45
Image uzerinde Image SeyN Javascript / DHTML / Ajax 2 29/11/2006 17:25
button alper Flash / Director / Swift 3D ... 5 20/11/2003 15:26
Ps Button ? Junkie Photoshop / Corel / PSP 3 12/10/2003 23:29


Forum saati Türkiye saatine göredir. GMT +3. Şu anda saat 09:20.

Reklamlar & Desteklenenler
Hassas Valf | Hassas Kaplama | Antalyamız | Gazete | Ticari Bilişim | Hakan Müştak | Rüya Tabirleri | Kadın | Hastalıklar | Cepte msn ve e-posta | Webmaster | Antalya Aupair | Turkish Property Antalya | Forum | Chat | Perde | Adsl | Araba | bolindir.com | guncelle.com | livescore | Web Tasarım | evden eve nakliyat | forum | evden eve | sohbet | Resimcim| Kalifiye İnsan Kaynakları | Web Tasarım | Oyun | Yusuf KOÇ | Akın Yorulmaz | şiir | UFO | Web Tasarım | Oyunlar | Canlı Tv |


Forum Yazılımı: vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright ©2001 - 2008, Ceviz.net