그래서 다음과 같은 클래스가 있습니다. 코드를 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에는 표시되지 않습니다. 나는 간단한 무언가를 인쇄하기 위해 청취자를 만들려고했지만, 똑같은 일이 발생합니다.
문제를 설명하는 [sscce] (http://sscce.org/)를 포함하도록 질문을 편집하십시오. – trashgod
이제 생각해 봅시다. 아마도 경계를 설정하지 않고 구성 요소가 놓여있는 공간을 실제로 정의하지 않은 것과 관련이있을 수 있습니다. – Daniel
레이아웃을 사용하고 ['getPreferredSize()'] (http://stackoverflow.com/q/7229226/230513)를 재정의하십시오. – trashgod