【问题标题】:How to draw string so it is not overlay old one如何绘制字符串,使其不覆盖旧字符串
【发布时间】:2012-08-18 02:06:00
【问题描述】:

我在我的 JPanel(hh:mm -> time) 中画了一些标志,但是当我更新它并调用 repaint 时,它会覆盖旧字母(它们不会消失)。如何解决这个问题?

【问题讨论】:

  • 删除它们?将它们放在自己的组件中?
  • 您是否尝试调用重新验证?
  • 如需尽快获得更好的帮助,请发帖SSCCE
  • 这将归结为“如何”绘制它们。例如,如果您使用任何类型的缓冲或分层绘画方法(在图层中绘制部分并且不同步)。您可以查看stackoverflow.com/questions/11691496/… 看看是否有帮助
  • 感谢您尝试让我们猜测您的代码在做什么。这通常是因为没有调用superpaint或者paintComponent方法,但是如果不显示相关代码我们应该怎么知道h3ll呢??

标签: java swing jpanel drawstring


【解决方案1】:

去掉前几行调用后,

revalidate();

然后

repaint();

非常快速的代码

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestComponent extends JPanel {

    private String drawThis;

    public TestComponent() {
        this.drawThis = "Hello";
        JButton button = new JButton("Change");
        button.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e)
            {
                //Execute when button is pressed
                setDrawThis("World");
                repaint();
            }
        }); 
        this.add(button);
    }
    private void drawString(Graphics g, String text, int x, int y) {
        for (String line : text.split("\n"))
            g.drawString(line, x, y += g.getFontMetrics().getHeight());
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        drawString(g, drawThis, 20, 20);
    }

    public void setDrawThis(String s) {
        this.drawThis = s;
    }

    public static void main(String s[]) {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        TestComponent tc = new TestComponent();

        f.add(tc);
        f.setSize(220, 220);
        f.setVisible(true);
    }
}

【讨论】:

  • public void aktualizuj(int nrPrzystanku){ this.nrPrzystanku = nrPrzystanku;重新验证();重绘();不工作。这就是我想做的,删除它们并放置新的。 }
  • 先删除旧行,再添加新行,然后重新验证并重新绘制。
  • 这就是我要问的怎么办?我不希望新字符串覆盖旧字符串。
  • 好吧,问题好像重复了:stackoverflow.com/questions/5842360/…
  • super.paintComponent(g) 作为被覆盖的 paintComponent(...) 方法内的第一行,在我看来足以删除所有以前的图纸并添加一个新的.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 2014-03-12
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多