遇到Java和GUI问题

时间:2010-10-14 15:50:49

标签: java

让我的代码正常工作时遇到问题。我无法在GUI中显示char数组(myArray)。当它正常工作时,我必须显示数组,如果接下来使用字母,我必须重新显示数字与使用的字母消失。继续这个直到字母数组为空。我在引号中放置了指令的说明。我目前正在使用Eclipse。

  

开发游戏 - 基于“Wordmole”   向用户显示一个字母网格(读取   从文件)。让用户输入一个   单词使用输入对话框。如果   输入的单词是有效的   检查单词的所有字母   出现在网格中。否则使用消息   用于显示错误消息的对话框。如果   这个词的所有字母都在   网格,然后奖励玩家   适当的点,和   删除网格中的字母。其他   使用消息对话框告诉用户   这个词不在那里。让玩家   继续播放直到用户退出   通过不输入单词或通过   点击取消。网格没有   其中包含更多字母。

import java.awt.GridLayout;
//import java.util.StringTokenizer;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Project2 {
    public static String inputWord;
    public static String matrix = "Words\n\n";
    public static String total = "Total\n\n";
    public static String newWord;
    public static char[][] myArray; 

public static void main(String[] args){ 

    myArray = fillArray("project2a.txt");


    while(true){
        int count = 0;
        int sum = 0;
        inputWord = JOptionPane.showInputDialog(null,"Enter a word:");
        if(inputWord == null || inputWord.length() == 0) break;
        newWord = inputWord.toUpperCase();

        if(IsValidWord(newWord)){
            for(int x = 0; x < newWord.length(); x++){

                for(int i = 0; i < 10; i ++){
                    for(int j = 0; j < 10; j++){
                        if(newWord.charAt(x) == myArray[i][j]) count++;
                    }
                }
            }

            if(count == newWord.length()){
                for(int c = 0; c < newWord.length(); c++)
                    sum += scoreValue(newWord.charAt(c)); 

                for(int x = 0; x < newWord.length(); x++){

                    for(int i = 0; i < 10; i ++){
                        for(int j = 0; j < 10; j++){
                            if(newWord.charAt(x) == myArray[i][j]) myArray[i][j] = (' ');
                        }
                    }   
                }
                matrix = matrix + newWord + "\n";
                total = total + sum + "\n";
            }
            else
                JOptionPane.showMessageDialog(null,"The word is not there!!!");




            } // IF

        else
            JOptionPane.showMessageDialog(null,"ERROR: The word is invalid!!!");

        } //while
    createAndShowGUI();
}

public static char[][] fillArray(String myFile){
    TextFileInput tfi = new TextFileInput(myFile);
    String line = tfi.readLine();
    System.out.println(line);
    int rows, cols;
    rows = Integer.parseInt(line);
    cols = Integer.parseInt(line);

    char[][] rtn = new char[rows][cols];

    for(int i=0; i < rows; i++) {
        line = tfi.readLine();
        System.out.println(line);
        for(int j= 0; j < cols; j++) {
            rtn[i][j] = line.charAt(j);

        } // For
    } // For
    return rtn;
} // FillArray

public static boolean IsValidWord(String myWord){
    for(int i = 0; i < myWord.length(); i++)
        if(!Character.isLetter(myWord.charAt(i))) return false;
    return true;
} // IsValidWord

public static int scoreValue(char letters){
    if(Character.isLetter(letters)){
        if(letters == 'A' || letters == 'E' || letters == 'I' || letters == 'O' || letters == 'U') 
            return 0;
        else if(letters == 'K' || letters == 'V' || letters == 'F' || letters == 'W') return 5;
        else if(letters == 'X' || letters == 'Q') return 10;
        } // If statement
    return 1;

    } // scoreValue

public static void createAndShowGUI() {
    //Create and set up the window.
    JFrame frame = new JFrame("Word Game");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize( 100,100);//width, height);
    frame.setLocation(200,200);//x, y);
    frame.setLayout(new GridLayout(1,2));

    JTextArea textArea = new JTextArea(5, 20);
    JTextArea textArea1 = new JTextArea(5, 20);
    textArea.setEditable(false);
    textArea1.setEditable(false);
    JScrollPane scrollPane = new JScrollPane(textArea);
    JScrollPane scrollPane2 = new JScrollPane(textArea1);
    frame.getContentPane().add(scrollPane);
    frame.getContentPane().add(scrollPane2);

    textArea.setText(matrix);
    textArea1.setText(total);

    //Display the window.
    frame.pack();
    frame.setVisible(true);


}// createAndShowGUI

public static void createAndShowGUI2() {
    //Create and set up the window.
    JFrame frame = new JFrame("Letters");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize( 100,100);//width, height);
    frame.setLocation(200,200);//x, y);
    frame.setLayout(new GridLayout(1,2));

    JTextArea textArea = new JTextArea(5, 20);
    textArea.setEditable(false);
    JScrollPane scrollPane = new JScrollPane(textArea);
    frame.getContentPane().add(scrollPane);

    textArea.setText(myArray);


    //Display the window.
    frame.pack();
    frame.setVisible(true);


}// createAndShowGUI
}

2 个答案:

答案 0 :(得分:1)

在传递多维char数组时,JTextComponent setText获取String。我不完全确定你要做什么,但尝试在显示之前想出一种变成字符串的方法。记住String类有一个接受char数组的构造函数;)

答案 1 :(得分:0)

好的,所以你试图用一个数组初始化一个textArea,如果你看一下JTextArea的api,它有一个方法setText(String someText),如果你传入一个数组就无法工作。我很惊讶eclipse没有将此标记为错误。所以你需要循环你的字符数组并使用insert(字符串,位置)设置字段,请参阅api。将此与shendrics回答从char数组创建一个字符串,你应该设置为go。

JTextArea Api