Превращение некоторых JTextBox в JLabels в игре Судоку
Итак, вот что у меня есть для моей игры судоку. Теперь моя сетка отображает только те текстовые поля, где пользователь может вводить цифры, но пока ничего не произойдет. Я хочу знать, как сделать так, чтобы пользователь мог вводить только один символ и только цифры. Я также хотел бы знать, как сделать некоторые текстовые поля jdialogs, отображающие не редактируемые числа, которые я беру с http://www.websudoku.com/ для головоломки. Любая помощь будет оценена. Благодарю.
Основной класс
import javax.swing.JOptionPane;
public class Game{
public static void main(String[] args) {
JOptionPane.showMessageDialog(null, "Hello. Welcome to a game of Sudoku by #### ####.");
Level select = new Level();
}
}
Сложность Выберите класс
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Level extends JFrame {
private JLabel tag1;
private JButton butt1;
private JButton butt2;
private JButton butt3;
private JButton butt4;
public Level(){
super("Difficulty");
setLayout(new FlowLayout());
setSize(250,130);
setVisible(true);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
tag1 = new JLabel("Please Select Your Difficulty.");
add(tag1);
butt1 = new JButton("Easy.");
butt1.setToolTipText("For players new to Sudoku.");
add(butt1);
butt2 = new JButton("Medium.");
butt2.setToolTipText("Your abilites will be tested.");
add(butt2);
butt3 = new JButton("Hard.");
butt3.setToolTipText("Your skills will be strained.");
add(butt3);
butt4 = new JButton("Evil!");
butt4.setToolTipText("You will not survive.");
add(butt4);
thehandler handler = new thehandler();
butt1.addActionListener(handler);
butt2.addActionListener(handler);
butt3.addActionListener(handler);
butt4.addActionListener(handler);
}
private class thehandler implements ActionListener{
public void actionPerformed(ActionEvent event){
String string = "";
if(event.getSource()==butt1){
dispose();
string = "Have fun!";
SudokuPanel Squares = new SudokuPanel();
}
else if(event.getSource()==butt2){
dispose();
string = "Good luck!";
SudokuPanel Squares = new SudokuPanel();
}
else if(event.getSource()==butt3){
dispose();
string = "Try to keep your head from exploding...";
SudokuPanel Squares = new SudokuPanel();
}
else if(event.getSource()==butt4){
dispose();
string = "Please refrain from smashing any keyboards.";
SudokuPanel Squares = new SudokuPanel();
}
JOptionPane.showMessageDialog(null, string);
}
}
}
Судоку Панель Класс
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
public class SudokuPanel extends JFrame {
public final int SQUARE_COUNT = 9;
public Squares [] squares = new Squares[SQUARE_COUNT];
public SudokuPanel(){
super("Sudoku");
setSize(600,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new GridLayout(3,3));
for(int i=0; i<SQUARE_COUNT; i++){
squares[i] = new Squares();
panel.add(squares[i]);
}
JPanel panel2 = new JPanel();
JButton startTime = new JButton();
JButton stop = new JButton();
JButton resetTimer = new JButton();
MyTimer timer = new MyTimer();
startTime = new JButton("Start Timer");
stop = new JButton("Stop Timer");
final JLabel timerLabel = new JLabel(" ...Waiting... ");
resetTimer = new JButton("Reset");
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu menu = new JMenu("Menu");
menuBar.add(menu);
JMenuItem newDifficulty = new JMenuItem("Select New Difficulty");
menu.add(newDifficulty);
JMenuItem reset = new JMenuItem("Reset Puzzle");
menu.add(reset);
JMenuItem exit = new JMenuItem("Exit");
menu.add(exit);
exitaction e = new exitaction();
newDifficultyaction d = new newDifficultyaction();
resetaction f = new resetaction();
reset.addActionListener(f);
exit.addActionListener(e);
newDifficulty.addActionListener(d);
panel2.add(timer);
add(panel, BorderLayout.CENTER);
add(panel2, BorderLayout.PAGE_END);
setVisible(true);
setLocationRelativeTo(null);
}
public class exitaction implements ActionListener{
public void actionPerformed (ActionEvent e){
System.exit(0);
}
}
public class newDifficultyaction implements ActionListener{
public void actionPerformed (ActionEvent e){
dispose();
Level select = new Level();
}
}
public class resetaction implements ActionListener{
public void actionPerformed (ActionEvent e){
dispose();
SudokuPanel Squares = new SudokuPanel();
}
}
}
Класс квадратов / ячеек
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
public class Squares extends JPanel {
public final int CELL_COUNT = 9;
public Cell [] cells = new Cell[CELL_COUNT];
public Squares(){
this.setLayout(new GridLayout(3,3));
this.setBorder(new LineBorder(Color.BLACK,2));
for(int i =0; i<CELL_COUNT; i++){
cells[i] = new Cell();
this.add(cells[i]);
}
}
public class Cell extends JTextField{
private int number;
public Cell(){
}
public void setNumber(int number){
this.number = number;
this.setText("1");
}
public int getNumber(){
return number;
}
}
}
Таймер Класс
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MyTimer extends Panel {
private JLabel timeDisplay;
private JButton resetButton;
private JButton startButton;
private JButton stopButton;
Timer timer;
public MyTimer(){
startButton = new JButton("Start Timer");
stopButton = new JButton("Stop Timer");
timeDisplay = new JLabel("...Waiting...");
this.add(startButton);
this.add(stopButton);
this.add(timeDisplay);
event e = new event();
startButton.addActionListener(e);
event1 c = new event1();
stopButton.addActionListener(c);
}
public class event implements ActionListener{
public void actionPerformed(ActionEvent e){
int count = 0;
timeDisplay.setText("Elapsed Time in Seconds: " + count);
TimeClass tc = new TimeClass(count);
timer = new Timer(1000, tc);
timer.start();
}
}
public class TimeClass implements ActionListener{
int counter;
public TimeClass(int counter){
this.counter = counter;
}
public void actionPerformed(ActionEvent e){
counter++;
timeDisplay.setText("Elapsed Time in Seconds: " + counter);
}
}
class event1 implements ActionListener{
public void actionPerformed (ActionEvent c){
timer.stop();
}
}
}
1 ответ
Я хочу знать, как сделать так, чтобы пользователь мог вводить только один символ и только цифры.
Есть несколько способов, которые легко обнаружить при поиске на этом сайте, так как эта проблема является распространенной. Два, о которых я упомяну: используйте JFormattedTextField или используйте JTextField, к которому в Document добавлен DocumentFilter, что предотвращает ввод неправильного ввода.
Я также хотел бы знать, как сделать некоторые текстовые поля jdialogs, отображающие не редактируемые числа, которые я беру с http://www.websudoku.com/ для головоломки. Любая помощь будет оценена.
Несколько возможных решений этого, включая
- Установите для свойства enabled компонента значение false.
- Установите для свойства focusable компонента значение false.
Некоторые проблемы с вашим постом:
- Вы упоминаете об использовании "текстовых полей". Я рекомендую вам избегать использования не-Java терминов, не относящихся к Swing, таких как "текстовые поля", поскольку они могут привести к путанице. Если вы используете текстовый компонент определенного типа и спрашиваете об этом, укажите тип компонента по имени, поскольку решения могут различаться в зависимости от типа.
- Вы опубликовали кодовую стену, большая часть которой не связана с вашей проблемой. Пожалуйста, помните, что мы добровольцы, и, пожалуйста, будьте добры к нам. Один из способов - избежать публикации слишком большого количества несвязанного кода. Лучше всего было бы опубликовать небольшой минимальный пример программы для вопросов, которые в этом нуждаются.