【问题标题】:Line created by drawline method, disappears when resizing form由drawline方法创建的线,在调整表格大小时消失
【发布时间】:2014-09-26 16:14:42
【问题描述】:

我有一个 jlable。我要在上面画一个图。但是我意识到通过 draw line 方法创建的一条线,在调整框架大小时消失了。

这是我的代码。我想知道如何避免在调整大小时消失。我想保持排队甚至调整 jframe 的大小。

  void graph(JComponent jcom,int thick,int height,int xpos,int ypos,Color col){
        Graphics2D gfx=(Graphics2D) jcom.getGraphics();
        gfx.setStroke(new BasicStroke(thick));
        gfx.setPaint(col);
        gfx.drawLine(xpos, ypos, xpos, ypos-height);
    }  

按钮点击代码

graph(jLabel1, 10, 100, 200, 200, Color.GREEN);

【问题讨论】:

    标签: java swing java-2d


    【解决方案1】:
    1. 您可以创建自己的类,该类从 JLabel 扩展而来,并有一个额外的方法来决定它是否必须绘制线条。

      在这个新类的重写paintComponent() 方法中,在super.paintComponent() 调用之后画线。

    2. 将建议 1 中的逻辑应用到您 JLabel 的父组件中。 (不确定这是否适用于所有情况)

    【讨论】:

    • 自定义渲染的通用组件可以在JPanel 中找到。 OTOH JLabel 使用 BufferedImage 进行绘画。随着每个新元素的添加,OP 使用的技术将起作用(稍作调整并添加一两行代码)。
    • @conffusion 和 Andrew Thompson。我仍然没有实现这一点。但是我对此有疑问。如果我创建一个扩展 JLabel 的自定义类,我认为它充当标签。我的应用程序我必须多次更新我的图表。所以当我根据你的回答更新我的图表时,我是否需要创建这个标签的新实例?这是否意味着删除我现有的 jlable 并将新的 jlable 添加到面板?还是我错了?
    • 'paintComponent' 在 Swing 决定重新绘制组件时被调用。如果某些外部数据发生变化,您可以通过调用 Component.repaint() 方法让 Swing 重新绘制组件。真正调用paint()方法是由swing管理的,由UI线程完成,所以不要自己调用paint()。 (stackoverflow.com/questions/4396583/…)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多