2017-02-17 5 views
-1

Метод try and catch работает и может узнать, является ли ввод текста выбранным JTextField числом или нет. ¨Пробовал ли тест, чтобы найти, является ли пользовательский ввод не числом. Нужна помощь, чтобы получить это одно JTextfield, написанное для получения пустого

Если это не номер, текст следует удалить и сообщить, что это не номер, но до сих пор мне удавалось только удалить текст, написанный с помощью цикла for. Который удаляет весь текст на всех JTextFields. Мне нужно удалить только тот, который был написан пользователем. Я не смог найти правильный способ создания того, что делает цикл for так, чтобы удалить текст только один раз.

Это игра Sudoku, поэтому она имеет как 81 текстовых полей

Вы можете найти тест на самой описанной части с этим комментарием над ним:

// ------- -------------------------------------------------- Этот тест < Просто хочу, чтобы удалить, что один чувствовал пользователь написал в

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.ArrayList; 
import java.util.concurrent.ThreadLocalRandom; 

/** 
* Created by Gaute on 1/30/2017. 
*/ 

public class Assignment03GUI extends JFrame implements ActionListener{ 
    ArrayList<JTextField> txtfeltNummer = new ArrayList<JTextField>(); 
    JMenuBar menuBar = new JMenuBar(); 
    JMenu fileMenu = new JMenu("File"); 

    JMenu newGame = new JMenu("New Game"); 

    JMenuItem easy = new JMenuItem("Easy"); 
    JMenuItem medium = new JMenuItem("Medium"); 
    JMenuItem hard = new JMenuItem("Hard"); 

    JMenuItem deleteGame = new JMenuItem("Delete Game"); 

    public Assignment03GUI() { 
     JFrame sudokuWindow = new JFrame(); 
     sudokuWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     sudokuWindow.setTitle("Sudoku"); 

     sudokuWindow.setLayout(new GridLayout(9, 0)); 
     sudokuWindow.setSize(1000,1000); 

     menuBar.add(fileMenu); 
     fileMenu.add(newGame); 
     fileMenu.add(deleteGame); 

     newGame.add(easy); 
     newGame.add(medium); 
     newGame.add(hard); 

     sudokuWindow.setJMenuBar(menuBar); 

     JTextField tekstfelt;    //Deklarer variabelen så den kan brukes utenfor for løkka 

     for (int i = 0; i < 81; i++) { 
      tekstfelt = new JTextField(); 



      //---------------------------------------------------------This test < Just want to remove that one felt user wrote in 
      tekstfelt.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        String text = ((JTextField) e.getSource()).getText(); 

        try{ 
         Integer.parseInt(text); 
         System.out.println("An integer"); 
        } 
        catch (NumberFormatException e2) { 
         for (JTextField felt : txtfeltNummer) { 
          felt.setText(""); 
          felt.setEditable(true); 
         } 
         JOptionPane.showMessageDialog(null,"Ugyldig, ikke et tall"); 
        } 
       } 
      }); 



      tekstfelt.setSize(100,100); 

      tekstfelt.putClientProperty("id ", Integer.valueOf(i)); 

      txtfeltNummer.add(tekstfelt); 
      sudokuWindow.add(tekstfelt); 
     } 

     easy.addActionListener(this); 
     medium.addActionListener(this); 
     hard.addActionListener(this); 
     deleteGame.addActionListener(this); 

     sudokuWindow.setVisible(true); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 

     Object source = e.getSource(); 

     if (source.equals(easy) || source.equals(medium) || source.equals(hard)) { 
      for (JTextField felt : txtfeltNummer) { 
       felt.setText(randomNumber(1, 9)); 
       felt.setEditable(true); 

       int removeNumbers = Integer.parseInt(randomNumber(0, 3)); 

       if (source.equals(easy) && removeNumbers == 0) { 
        felt.setText(""); 
       } 
       else if (source.equals(medium) && removeNumbers <= 1) { 
        felt.setText(""); 
       } 
       else if (source.equals(hard) && removeNumbers <= 2) { 
        felt.setText(""); 
       } 
       else { 
        felt.setEditable(false); 
       } 
      } 
     } 

     if (e.getSource().equals(deleteGame)) { 
      System.out.println("Delete Game"); 

      for (JTextField felt : txtfeltNummer){ 
       felt.setText(""); 
       felt.setEditable(true); 
      } 
     } 
    } 

    public static String randomNumber(int min, int max) { 
     int randomNum = ThreadLocalRandom.current().nextInt(min, max + 1); 
     String randomNumString = Integer.toString(randomNum); 

     return randomNumString; 
    } 
} 
+0

Вы, вероятно, будет лучше использовать DocumentFilter: http://docs.oracle.com/javase/7/docs/api/javax/swing/text/DocumentFilter.html – ControlAltDel

+0

Это что-то новое для меня – Zuflus

ответ

0

Найденный ответ с некоторой помощью другого сайта, все, что я должен был сделать, чтобы изменить

для (JTextField войлока: txtfeltNummer) до JTextField felt = (JTextField) e.getSource();

tekstfelt.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        String text = ((JTextField) e.getSource()).getText(); 

        try{ 
         Integer.parseInt(text); 
         System.out.println("An integer"); 
        } 
        catch (NumberFormatException e2) { 
         for (JTextField felt : txtfeltNummer) { 
          felt.setText(""); 
          felt.setEditable(true); 
         } 
         JOptionPane.showMessageDialog(null,"Ugyldig, ikke et tall"); 
        } 
       } 
      });