2017-02-17 1 views
-1

내 시도하고 잡는 방법 작동하고 선택된 JTextField에서 입력 된 텍스트가 숫자인지 여부를 확인할 수 있습니다. ¨사용자 입력이 숫자가 아닌지 찾기 위해 try and catch 테스트를 수행 했습니까? 그 중 하나를 얻으려면 도움이 필요 JTextfield 비어있는

숫자가 아닐 때는 텍스트를 제거하고 번호가 아니라는 메시지를 표시합니다. 그러나 지금까지는 for 루프를 사용하여 작성된 텍스트 만 제거 할 수있었습니다. 그러면 모든 JTextField의 모든 텍스트가 제거됩니다. 나는 단지 사용자가 작성한 것을 제거하면됩니다. for 루프가 텍스트를 한 번만 제거하는 방식으로 수행하는 올바른 방법을 찾지 못했습니다.

이있는 스도쿠 게임, 그것은 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

에 쓴 느꼈다 제거 할 내가했던 일은, 변경했다

for (JTextField felt : 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"); 
        } 
       } 
      });