JPanel (hh:mm -> time) でいくつかの記号を描画していますが、更新して repaint を呼び出すと、古い文字がカバーされます (消えません)。これを修正する方法は?
質問する
1728 次
1 に答える
2
前の行の呼び出しを削除した後、
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);
}
}
于 2012-08-18T02:09:06.800 に答える