调用paintComponent后Java Swing绘制图像

标签 java swing

我对如何在 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/

相关文章:

java - getText() 与 getPassword()

java - 我如何 "cancel"一个 CountDownLatch?

java - 为什么 FilterBuilders.rangeFilter 方法会更改范围查询中的日期?

java - 如何使用箭头键在 JPanel 中移动对象

java - 为什么水平滚动条不适用于我的 JTextArea?

java - 为什么组件没有出现在我的 JComponent 中?

java - 用一种类型参数化的方法接受两种类型

java - 使用 java 和 Tika 的正则表达式将字符串拆分为数组

Java:具有非透明组件的透明窗口?

java - 将图像转换为按钮数组