paintComponent вызывается дважды при попытке вызова другой функции - PullRequest
0 голосов
/ 12 апреля 2019

Попытка использовать метод paintComponent для рисования некоторых строк с помощью другого метода, называемого drawMyString. Кажется, что 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 голосов
/ 18 мая 2019

Как сказал khelwood, вам сначала нужно будет инициализировать строку, и это можно сделать, установив в начале два параметра 0 в paintComponent.

...