2013-05-29 2 views
0

Я уже некоторое время работаю над колесом фортуны для школьного проекта и столкнулся с проблемой чтения текста из файлов, которые действуют как головоломки на JTextField array который действует как доска, на которой отображается головоломка.Чтение текста из файла на массив JTextField

Что я до сих пор: графический интерфейс для игры для запуска, а также все графические компоненты, которые будут включены. Это код для создания доски головоломки в классе letterBoard

import java.awt.*; 
import java.awt.event.*; 
import java.io.BufferedReader; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import javax.swing.*; 

public class letterBoard extends JPanel 
          implements ActionListener     
{ 
private JTextField[] fields = new JTextField[TEXT_FIELD_COUNT]; 
private Box[] boxes = new Box[SUIT_COUNT]; 
private static int TEXT_FIELD_COUNT = 14; 
private static int SUIT_COUNT = 1; 
Color yungMoney = new Color(0, 180, 100); 
static String[] fieldsArray = new String[52]; 


public letterBoard() 
{ 
    setPreferredSize(new Dimension(1,299)); 
    setBackground(yungMoney); 
    JPanel panel = new JPanel(new GridLayout(0,14)); 
    panel.setBackground(yungMoney); 
    for(int t=0; t<4; t++) 
    { 
     for (int i =0; i < boxes.length; i++) 
     { 
      boxes[i] = Box.createHorizontalBox(); 
      for (int j=0; j< TEXT_FIELD_COUNT/SUIT_COUNT; j++) 
      { 
       int index = i * (TEXT_FIELD_COUNT/SUIT_COUNT) + j; 
       fields[index] = new JTextField(" "); 
       fields[index].setEditable(false); 
       fields[index].setPreferredSize(new Dimension(50, 50)); 
       fields[index].setBorder(BorderFactory.createLineBorder(Color.BLACK,1)); 
       panel.add(fields[index]); 
      } 
     } 
    } 
    panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLACK,2),"WHEEL OF FORTUNE")); 
    add(panel); 
} 

Эта доска, где будет отображаться головоломка. У меня есть JButtonreset в классе wheelGUI, который действует как основной класс для программы, через которую проходят все остальные классы.

Что я хочу сделать: при нажатии пользователем JButton reset программа должна прочитать строку из текстового файла, которая будет действовать как головоломка для этого раунда. Он должен помещать один символ в каждую коробку доски и оставлять пробелы пустыми. Он должен превратить любую коробку с буквой, занимающей ее черным, чтобы обозначить, что письмо, которое еще предстоит угадать, расположено там.

Что не работает: A FileInputStream и BufferedReader, кажется, не совместимы с swing компонентами, такими как JTextField[]. Я не уверен в другом способе чтения файла в JTextField[], или если это возможно даже при создании платы. Спасибо!

Примечание: здесь код wheelGUI класс. Другой код там связан с отдельными классами.

import java.awt.*; 
import java.awt.event.*; 
import java.io.BufferedReader; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.Random; 
import javax.swing.*; 

public class wheelGUI extends JFrame implements ActionListener { 
private playerPlate player1, player2, player3; 
Color yungMoney = new Color(0, 180, 100); 
private String fileName = "D:/Users/Garrett/Workspace/WheelOfFortune/src/wheelOfFortune/img/wheel1.png"; 
private String cat; 
private static String spinValue; 
private String[] wheelStuff = new String[]{"Bankrupt", "Lose a Turn", "$5000", "$600", "$500", "$300", "$800", "$550", "$400", "$900", "$350", "$450", "$700"}; 
private JTextField results; 
private static JButton spin, solve, buyVowel, guess, reset, end, cont; 
private int numVowel; 
private int numLetter; 
private static int currentPlayer; 
public wheelGUI() { 
    super("Butt Stuff!"); 

    ImageIcon i = new ImageIcon(fileName); 
    JLabel picture = new JLabel(i); 

    player1 = new playerPlate("Garrett", Color.RED, 0); 
    player2 = new playerPlate("Jonny", Color.YELLOW, 1); 
    player3 = new playerPlate("Robert", Color.BLUE, 2); 

    letterBoard letters = new letterBoard(); 
    catBox category = new catBox(cat); 
    inputField input = new inputField(); 

    Box wall = Box.createHorizontalBox(); 
    wall.add(player1); 
    wall.add(Box.createHorizontalStrut(5)); 
    wall.add(player2); 
    wall.add(Box.createHorizontalStrut(5)); 
    wall.add(player3); 

    spin = new JButton("Spin!"); 
    spin.addActionListener(this); 
    solve = new JButton("Solve the Puzzle"); 
    solve.addActionListener(this); 
    buyVowel = new JButton("Buy a Vowel"); 
    buyVowel.addActionListener(this); 
    guess = new JButton("Guess a Letter"); 
    guess.addActionListener(this); 
    reset = new JButton("Reset"); 
    reset.addActionListener(this); 
    cont = new JButton("Continue"); 
    cont.addActionListener(this); 

    JPanel buttonPanel = new JPanel(new GridLayout(3, 1, 5, 5)); 
    buttonPanel.setPreferredSize(new Dimension(300,380)); 
    buttonPanel.setBackground(yungMoney); 
    buttonPanel.add(spin); 
    buttonPanel.add(guess); 
    buttonPanel.add(buyVowel); 
    buttonPanel.add(solve); 
    buttonPanel.add(cont); 
    buttonPanel.add(reset); 

    JPanel result = new JPanel(); 
    result.setBackground(yungMoney); 
    results = new JTextField(spinValue); 
    results.setBackground(Color.CYAN); 
    results.setHorizontalAlignment(JTextField.CENTER); 
    results.setBorder(BorderFactory.createLineBorder(Color.BLACK,2)); 
    results.setPreferredSize(new Dimension(150,100)); 
    results.setFont(new Font("Impact", Font.PLAIN, 28)); 
    results.setEditable(false); 
    result.add(results); 

    Box catInput = Box.createVerticalBox(); 
    catInput.add(category); 
    catInput.add(Box.createVerticalStrut(50)); 
    catInput.add(result); 
    catInput.add(Box.createVerticalStrut(100)); 
    catInput.add(input); 

    Container c = getContentPane(); 
    c.setBackground(yungMoney); 
    c.add(buttonPanel, BorderLayout.EAST); 
    c.add(wall, BorderLayout.SOUTH); 
    c.add(letters, BorderLayout.NORTH); 
    c.add(picture, BorderLayout.WEST); 
    c.add(catInput, BorderLayout.CENTER); 
} 
public JTextField spinWheel(String[] wheelStuff) 
{ 
    Random rnd = new Random(); 
    spinValue = wheelStuff[rnd.nextInt(wheelStuff.length)]; 
    results.setText(spinValue); 
    return results; 
} 
public void actionPerformed(ActionEvent e) 
{ 
    JButton b = (JButton)e.getSource(); 
    if(b==spin) 
    { 
     spinWheel(wheelStuff); 
     repaint(); 
    } 
} 
public static void main(String[] args) { 
    wheelGUI window = new wheelGUI(); 
    window.setBounds(50, 50, 1024, 768); 
    window.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    window.setResizable(false); 
    window.setVisible(true); 
} 
} 

Кроме того, это не имеет значения для меня, какой класс метод, чтобы сделать головоломки. Я бы предположить, поставив его в letterBoard классе было бы проще. Спасибо еще раз за помощь!

ответ

1

Вместо того, чтобы читать строку файла, прочитайте весь файл во что-то вроде java.util.List.

Когда пользователь нажимает кнопку «Сброс», просто выберите следующий элемент из списка и используйте цикл, чтобы получить каждый символ из String.

Взгляните на this, которая демонстрирует основную концепцию построения текстовых полей с помощью String, который расщепляется в это отдельные символы

Смежные вопросы