내 시도하고 잡는 방법 작동하고 선택된 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;
}
}
당신은 아마하는 DocumentFilter를 사용하여 더 나을 거라고는 : http://docs.oracle.com/javase/7/docs/api/javax/swing/text/DocumentFilter.html – ControlAltDel
그것은 나에게 새로운 뭔가 – Zuflus