2009-11-22 36 views
6

Tôi muốn hỏi điều tương tự hơn this question nhưng sử dụng SWT: Có cách nào để tạo Nút bằng hình ảnh nút của riêng bạn không chỉ bằng hình ảnh bên trong nút không? Nếu không phải là một cách khác để tạo một nút tùy chỉnh trong java?Tạo một nút tùy chỉnh với SWT

Trả lời

10
public class ImageButton extends Canvas { 
    private int mouse = 0; 
    private boolean hit = false; 

    public ImageButton(Composite parent, int style) { 
     super(parent, style); 

     this.addPaintListener(new PaintListener() { 
      public void paintControl(PaintEvent e) { 
       switch (mouse) { 
       case 0: 
        // Default state 
        e.gc.drawString("Normal", 5, 5); 
        break; 
       case 1: 
        // Mouse over 
        e.gc.drawString("Mouse over", 5, 5); 
        break; 
       case 2: 
        // Mouse down 
        e.gc.drawString("Hit", 5, 5); 
        break; 
       } 
      } 
     }); 
     this.addMouseMoveListener(new MouseMoveListener() { 
      public void mouseMove(MouseEvent e) { 
       if (!hit) 
        return; 
       mouse = 2; 
       if (e.x < 0 || e.y < 0 || e.x > getBounds().width 
         || e.y > getBounds().height) { 
        mouse = 0; 
       } 
       redraw(); 
      } 
     }); 
     this.addMouseTrackListener(new MouseTrackAdapter() { 
      public void mouseEnter(MouseEvent e) { 
       mouse = 1; 
       redraw(); 
      } 

      public void mouseExit(MouseEvent e) { 
       mouse = 0; 
       redraw(); 
      } 
     }); 
     this.addMouseListener(new MouseAdapter() { 
      public void mouseDown(MouseEvent e) { 
       hit = true; 
       mouse = 2; 
       redraw(); 
      } 

      public void mouseUp(MouseEvent e) { 
       hit = false; 
       mouse = 1; 
       if (e.x < 0 || e.y < 0 || e.x > getBounds().width 
         || e.y > getBounds().height) { 
        mouse = 0; 
       } 
       redraw(); 
       if (mouse == 1) 
        notifyListeners(SWT.Selection, new Event()); 
      } 
     }); 
     this.addKeyListener(new KeyAdapter() { 
      public void keyPressed(KeyEvent e) { 
       if (e.keyCode == '\r' || e.character == ' ') { 
        Event event = new Event(); 
        notifyListeners(SWT.Selection, event); 
       } 
      } 
     }); 
    } 

} 
+0

Bạn có thể làm hài lòng cả mã lớp? Tôi gặp khó khăn khi làm cho nó hoạt động. Cảm ơn! – Hectoret

+0

Tôi đã chỉnh sửa lớp học. Nó biên dịch, nhưng tôi chưa thực sự thử nghiệm nó. –

0

Không, bạn có thể thêm một PaintListener vào một nút, nhưng nó có thể sẽ trông rất lạ.

Điều bạn cần làm là đặt kiểu cửa sổ thành "chủ sở hữu được vẽ" và hơn là thêm mã vẽ của bạn vào phương thứC# wmDrawChild của Nút. Điều này có nghĩa là bạn cần thêm các phụ thuộc vào các lớp SWT bên trong và nó sẽ chỉ làm việc cho Windows.

Các vấn đề liên quan