2013-02-20 25 views
0

所以我有以下類。我已經過度簡化了代碼,因爲不能提供超過500行代碼。它基本上是一個很花哨的方:JComponent not registrationing

public class ModuleGui extends JComponent implements ElementInterface { 

private String name; 

private Rectangle2D s = new Rectangle2D.Double(); 
private Rectangle2D[] points; 
private int resizeSize = 10; 

private final ShapeResizeHandler shapeResizeHandler = new ShapeResizeHandler(); 

public ModuleGui(int x, int y){ 

    this.addMouseListener(shapeResizeHandler); 
    this.addMouseMotionListener(shapeResizeHandler); 

    this.x = x; 
    this.x = y; 

    points = new Rectangle2D[2]; 
    points[0] = new Rectangle2D.Double(x,y,1,1); 
    points[1] = new Rectangle2D.Double(x + width, y + height, resizeSize, resizeSize); 

    this.name = new String("Gate" + Integer.toString(namingCounter++)); 
} 

public void paintComponent(Graphics g){ 
    super.paintComponent(g); 

    Graphics2D g2d = (Graphics2D) g; 

    g2d.fill(points[1]); 

    //Set the main rectangle, fill it and draw it 
    s.setRect(points[0].getX(), points[0].getY(), 
      Math.abs(points[1].getCenterX() - points[0].getCenterX()), 
      Math.abs(points[1].getCenterY() - points[0].getCenterY())); 
    g2d.setColor(Color.WHITE); 
    g2d.fill(s); 
    g2d.setColor(Color.BLACK); 
    g2d.draw(s); 
    //Main rectangle draw end 

    //Add the name and the & symbol 
    g2d.drawString(this.name, (int) (s.getCenterX()), (int) (s.getY() + this.height/10)); 
} 


private class ShapeResizeHandler extends MouseAdapter{ 
    public void mousePressed(MouseEvent e){ 
     System.out.println("Funny"); 
    } 

    public void mouseReleased(){ 
     //Do more stuff 
    } 

    public void mouseDragged(MouseEvent e){ 
     //Do Stuff 
     repaint(); 
    } 
} 
    } 

現在我有此JComponent內部JPanel..but我似乎沒有趕上任何鼠標事件。鼠標事件顯示在JPanel中,但不在JComponent中。我試圖讓一個簡單的鼠標監聽器打印一些東西,但是也發生了同樣的情況。

+1

請編輯您的問題包括[SSCCE(http://sscce.org/)表現出您所描述的問題。 – trashgod 2013-02-20 12:41:46

+0

現在我想起來了,也許這與我沒有設定邊界並且沒有實際定義組件所在空間的事實有關。 – Daniel 2013-02-20 12:42:40

+2

使用佈局並覆蓋['getPreferredSize()'](http://stackoverflow.com/q/7229226/230513)。 – trashgod 2013-02-20 12:43:59

回答

1

確保您的組件可見且具有非零尺寸。下面是代碼爲我的作品:

public class MouseTest extends JComponent { 
    public MouseTest() { 
     addMouseListener (new MouseAdapter() { 
      @Override 
      public void mousePressed (MouseEvent e) { 
       System.out.println ("Mouse pressed"); 
       e.consume(); 
      } 
     }); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension (320, 240); 
    } 

    @Override 
    public void paint(Graphics g) { 
     g.setColor (Color.cyan); 
     g.fillRect (getX(), getY(), getWidth(), getHeight()); 
    } 

    public static void main(String[] args) { 
     JFrame frame = new JFrame ("Mouse Test"); 
     frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout (new BorderLayout()); 
     frame.getContentPane().add (new MouseTest(), BorderLayout.CENTER); 
     frame.pack(); 
     frame.setVisible (true); 
    } 
} 
+0

然後我一定在這裏做錯了事。將不得不仔細看看。 – Daniel 2013-02-20 13:32:38

+0

我有其他問題關於JComponent正確顯示,但您的示例工作。謝謝 :) – Daniel 2013-02-20 14:17:04