运行for循环时,在新行上打印g.Drawstring?

时间:2014-03-05 10:00:46

标签: java applet

我已经设置了一个任务,我已经在这个applet工作了好几天,试图找出一个解决方案,但是没有多少搜索提出了一个我能找到的答案,以满足我的需要。 问题是我需要创建一个java applet,告诉你有多少单词长度。所以,如果我输入“Hi There”,它会说: 1个字长2 1个字长5 我正在使用g.DrawString输出输入文本的结果。如果我输入多个单词并且输入的所有单词长度相同,则输出一行并输出正确的信息。如果我输入两个不同长度的单词,但它仍然只输出一行,并在输入的最后一个单词之前完全忽略任何内容。我似乎无法弄清楚如何让g.Drawstring向下移动一条线。这是我到目前为止的代码:

import java.util.*;
import java.applet.Applet;
import java.awt.*; 
import java.awt.event.*; 

public class assignmentneat extends Applet implements ActionListener {

String pr_name;
TextField pr_input;


public void init()
 {
 pr_input = new TextField(50);
 add(pr_input);
 pr_input.addActionListener(this);
 }  

public void start()
 {
 pr_name = " ";
 } 

public void actionPerformed(ActionEvent e)
 {
 int a = 0;
 int b;

 pr_name = e.getActionCommand();
 String[] words = pr_name.split(" ");

  for (String word : words)
    if (a < word.length()) 
    a = word.length();
    int pr_count[] = new int[a+1]; 

  for (String word : words) {
    pr_count[word.length()]++; }

  for (b = 0; b < pr_count.length; b++){
    if (pr_count[b] > 0) {
    pr_name = ("There are " + pr_count[b] + " words of length " + b); 

   repaint();
      }
     }
    }

public void paint(Graphics g)
 {
  g.drawString(pr_name,100,100);
 }

}

当整个程序在DrJava之类的内部运行时,整个程序运行得很好,它只是在applet形式时不想工作。 更新 我应该提一下,我意识到使用Jlabel等会更容易,但是我没有被教过与此有关,我只是在非常短的时间内学习java而且我不想用任何东西我到目前为止还没有被教过。

1 个答案:

答案 0 :(得分:0)

你想要做的是List Strings.希望你已经了解了Lists,你可以使用数组,但添加它们动态很糟糕。

使用列表,您可以在上一个循环中执行此类操作

public class assignment... {
    private List<String> list = new ArrayList<>();
    ....
    public void actionPerfomed(ActionEvent e) {
        ....
        // instead of this
        //for (b = 0; b < pr_count.length; b++){
            //if (pr_count[b] > 0) {
            //pr_name = ("There are " + pr_count[b] + " words of length " + b); 
            //repaint();
        //}

        // do this
        for (b = 0; b < pr_count.length; b++){
            if (pr_count[b] > 0) {
                list.add("There are " + pr_count[b] + " words of length " + b);
            }
        }
        repaint();  // repaint after all is added to the list.
    }
}

paint方法中,您可以遍历列表。您需要做什么,对于每一行,您需要更新y位置,因为它移动到下一行。由于你不能使用你没有学过的东西,我不会建议FontMetrics让你测量字母的高度。而只是猜测高度并增加每行的y。像这样的东西

public void paint(Graphics g) {
    int y = 20;
    for (String s : list) {
        g.drawString(s, 20, y);
        y += 15;  // 15 is just a guess. Play with it til you get it right
    }
}