首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JComponent未注册

JComponent未注册
EN

Stack Overflow用户
提问于 2013-02-20 20:19:23
回答 1查看 79关注 0票数 0

所以我有下面的类。我过度简化了代码,因为不能选择将500+代码行放入其中。它基本上是一个非常花哨的正方形:

代码语言:javascript
复制
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..but中有了这个JComponent,我似乎没有捕捉到任何鼠标事件。鼠标事件显示在JPanel中,但不显示在JComponent中。我试着做一个简单的鼠标监听器来打印一些东西,但是同样的事情发生了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-20 20:44:38

确保您的组件可见,并且具有非零尺寸。以下是适用于我的代码:

代码语言:javascript
复制
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);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14979722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档