尝试调用其他函数时,paintComponent被调用了两次

时间:2019-04-12 08:26:24

标签: java paintcomponent

在另一个名为drawMyString的方法的帮助下,尝试使用paintComponent方法绘制一些字符串。似乎drawMyString仅在paintComponent完成后才绘制字符串,这意味着如果我要绘制两个字符串,则它将首先绘制两个空行。

这是我一直在努力的代码:

public class DrawStrings extends JComponent {

    private int row=0;

    public DrawStrings() throws HeadlessException {
       setPreferredSize(new Dimension(700, 400));}

    public static void main(String[] args) {
       JFrame frame = new JFrame("DrawStrings");
       frame.add(new DrawStrings());
       frame.pack();
       frame.setVisible(true);
    }

    private void drawMyString(Graphics g, String text){
        g.drawString(text, 0, row);
        row +=20;
    }

    @Override protected void paintComponent(final Graphics g) {
       g.setColor(Color.BLACK);
       g.setFont(new Font("serif", Font.PLAIN, FONT_SIZE));
       drawRow(g,"this is row number 1");
       drawRow(g,"this is row number 2");
    }
}

预期输出:

>> this is row number 1
>> this is row number 2

实际输出:

>>
>>
>> this is row number 1
>> this is row number 2

为什么会发生这种情况,以及如何在保持drawMyStrings函数的情况下解决该问题?

1 个答案:

答案 0 :(得分:0)

就像khelwood所说的那样,您需要首先初始化行,这可以通过在paintComponent的开头将其设置为两个0来完成。