我对如何在 Swing 中扩展 JPanel 来制作 Canvas 样式对象有点困惑,如果我想在创建新对象后创建新图像或文本,我该怎么办?因为我假设那就是调用paintComponent的时候。
最佳答案
除了 ControlAltDel 的出色建议(有关如何以编程方式重绘的信息,请参阅 step 3 of the tutorial)和 Andrew Thompson ,这可以作为一个非常简单的示例来帮助您入门:
public class Main {
public static void main(final String[] args) throws InterruptedException {
final JFrame frame = new JFrame("Swing canvas");
frame.setBounds(100, 100, 640, 480);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
final CanvasPanel canvasPanel = new CanvasPanel();
frame.getContentPane().add(canvasPanel);
frame.setVisible(true);
final List<String> words = Arrays.asList("one", "ein", "une", "uno", "jeden", "een");
for (final String word : words) {
canvasPanel.addWord(word);
// Dirty way to simulate some heavy translation work...
Thread.sleep(246);
}
}
}
class CanvasPanel extends JPanel {
private final List<String> words = new ArrayList<>();
public void addWord(final String word) {
words.add(word);
repaint();
}
@Override
protected void paintComponent(final Graphics graphics) {
super.paintComponent(graphics);
for (int wordIndex = 0; wordIndex < words.size(); wordIndex++)
graphics.drawString(words.get(wordIndex), 42, 64 + 28 * wordIndex);
}
}
在此示例中, Canvas 面板调用其自身的 repaint 方法,但也可以从外部调用它。祝您的项目顺利!
关于调用paintComponent后Java Swing绘制图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27069000/