尝试调用其他函数时调用 paintComponent 两次
paintComponent is called twice when trying to call on other function
尝试使用 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 函数?
正如 khelwood 所说,您需要先初始化您的行,这可以通过在 paintComponent 的开头将其设置为两个 0 来实现。
尝试使用 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 函数?
正如 khelwood 所说,您需要先初始化您的行,这可以通过在 paintComponent 的开头将其设置为两个 0 来实现。