ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-在JPanels之间绘图

2019-12-08 07:00:01  阅读:279  来源: 互联网

标签:paintcomponent swing jpanel drawing java


我要以下情况:

JPanel用作“绘图板”,用户可以在其中添加具有特定连接点的模块,这些模块可用于与其他模块互连(例如Simulink或labView).

块本身是带有按钮的JPanel对象,设置空布局后,将通过add()方法将其添加到绘图板上.可以在MouseMotionListener的帮助下拖动JPanels.

为了绘制连接,我重写了绘图板的paintComponent()方法并调用g.drawLine()(在对super.paintComponent的调用之后).这是可行的,但是一旦您移动一个块,线条就会相互重叠,变成一团糟.
因此,我在用户移动块时调用drawingBoard.repaint().这样的效果是,在拖动过程中线条闪烁可见,然后立即消失.

显然,父级JPanel中的JPanels绘图相互干扰.

我该如何解决?

编辑:代码的一些摘要:

制图板:

public void paintComponent(Graphics g){
    g.clearRect(0, 0, getWidth(), getHeight());
    super.paintComponent(g);
    drawConnections(g);//Contains g.drawLine calls
}

使用JPanel.add()方法将块添加到绘图板上.下面是这种“块” JPanel的MouseMotionListener.

public void mouseDragged(MouseEvent e)
{
    pt = SwingUtilities.convertPoint(movingPanel, e.getX(), e.getY(), movingPanel.getParent());
    movingPanel.setBounds(pt.x - clickX, pt.y - clickY, movingPanel.getWidth(), movingPanel.getHeight());
    e.consume();

    movingPanel.getParent().repaint();
}

块JPanel不会覆盖paintComponent,因为其中不需要特殊的绘图.它仅包含一些JLabel和JButton.这些按钮用于在块之间创建连接.然后在上面提到的drawConnections中使用连接列表.

确实不止如此.

解决了:

确定,这是一个很小的细节.

在我使用的画线代码中

Graphics2D g2 = (Graphics2D) this.getGraphics();

代替

Graphics2D g2 = (Graphics2D) g;

我只是注意到引用不一样. D’oh

解决方法:

可行的方法可能是使这些行成为已添加到面板中的JComponents,并使它们自己重新绘制.将线逻辑和绘画计算隔离在线类中,而不是将其放在绘图板上也可能具有很好的效果.

标签:paintcomponent,swing,jpanel,drawing,java
来源: https://codeday.me/bug/20191208/2089888.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有