2013-02-20 1 views
0

그래서 다음과 같은 클래스가 있습니다. 코드를 500 줄 이상 두지 않아도되므로 코드를 단순화했습니다. 지금은 내가 어떤 마우스 이벤트를 잡으려고하지 않는 것 JPanel..but 안에이 JComponent의이JComponent가 등록되지 않았습니다

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(); 
    } 
} 
    } 

: 기본적으로 아주 멋진 광장입니다. 마우스 이벤트는 JPanel에는 표시되지만 JComponent에는 표시되지 않습니다. 나는 간단한 무언가를 인쇄하기 위해 청취자를 만들려고했지만, 똑같은 일이 발생합니다.

+1

문제를 설명하는 [sscce] (http://sscce.org/)를 포함하도록 질문을 편집하십시오. – trashgod

+0

이제 생각해 봅시다. 아마도 경계를 설정하지 않고 구성 요소가 놓여있는 공간을 실제로 정의하지 않은 것과 관련이있을 수 있습니다. – Daniel

+2

레이아웃을 사용하고 ['getPreferredSize()'] (http://stackoverflow.com/q/7229226/230513)를 재정의하십시오. – trashgod

답변

1

구성 요소가 보이며 크기가 0이 아닌지 확인하십시오. 다음은 나를 위해 작동하는 코드입니다.

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

+0

JComponent가 올바르게 표시되는 것과 관련하여 다른 문제가 있지만 예제가 작동합니다. 고맙습니다 :) – Daniel