我已经设置了一个任务,我已经在这个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而且我不想用任何东西我到目前为止还没有被教过。
答案 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
}
}