【问题标题】:paint g method print out only last char from arraypaint g 方法仅打印出数组中的最后一个字符
【发布时间】:2014-04-29 05:10:44
【问题描述】:

您好我有以下问题我的小程序应该打印字符到小程序垂直线,但它只打印字符串中的最后一个字符。我尝试在循环内部的不同位置移动 repaint() 方法,但它仍然只打印出字符串中的最后一个字符。当我使用 //System.out.print(letters[i]);或 //System.out.println(text);检查字符串或 charArray 的内容是什么,它会打印正确的输出,但我的 paint g 方法只打印最后一个 char 表单数组 有什么建议吗??

public class ExtensionExercise extends Applet implements ActionListener {
    String text;
    String output;
    Label label;
    TextField input;
    int xCoordinates = 30, yCoordinates = 50;
    char letters [];
    public void init(){
        label = new Label("Enter word");
        add(label);
        input = new TextField(10);
        add(input);
        input.addActionListener(this);
    }
    public void start(){
        text = "";
    }
    @Override
    public void actionPerformed(ActionEvent event) {
        text = event.getActionCommand();
        letters = text.toCharArray();

        for(int i = 0; i<letters.length; i++){
            text = String.valueOf(letters[i]);
            xCoordinates +=10;
            yCoordinates +=10;
        }
        repaint();
    }
    @Override
    public void paint(Graphics g){      
        g.drawString(text, xCoordinates, yCoordinates);
    }
}

【问题讨论】:

标签: java applet awt


【解决方案1】:

您只在for 循环之后调用repaint 一次,因此显然只会出现最后一个字母。所有的字母选择逻辑都需要出现在paint方法本身

@Override
public void paint(Graphics g) {
    super.paint(g);

    for (int i = 0; letters != null && i < letters.length; i++) {
        text = String.valueOf(letters[i]);
        g.drawString(text, xCoordinates, yCoordinates);
        // xCoordinates += 10; remove this
        yCoordinates += 10;
    }
}

请注意,您不想增加 xCoordinates 偏移量来实现垂直输出

【讨论】:

  • 当然,这只是一个没有阻塞调用的短有限循环
猜你喜欢
  • 2021-07-03
  • 1970-01-01
  • 2017-09-08
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多