将特定数字放在JTextFields网格中的特定JTextField中

时间:2014-04-26 04:58:42

标签: java jtextfield

我有一个JTextFields的网格为我的数独gui但我很困惑如何放置例如左上方框中的3,在该框的左上角所以它看起来像这样

http://tinypic.com/r/t7io28/8

并且该号码对用户不可编辑?

这是我设置细胞的课程:

import java.awt.*;

import javax.swing.*;
import javax.swing.border.*;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;


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();
            cells[i].setDocument(new NumericalDocument());
            this.add(cells[i]);
        }
    }

    public class Cell extends JTextField{

        private int number;
        public Cell(){

        }
        public void setNumber(int number){
            this.number = number;
            this.setText("5");
        }
        public int getNumber(){

            return number;
        }

    }

    public static class NumericalDocument extends PlainDocument{
        String numbers = "0123456789";
        public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
            if (getLength() == 0 && str.length() == 1 && numbers.contains(str)) {
                super.insertString(offs, str, a);
            }
            else {
                Toolkit.getDefaultToolkit().beep();
            }
        }
    }
}

这里是将3x3单元格设置为3x3网格的类

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 submit = new JButton();
        MyTimer timer = new MyTimer();

        startTime = new JButton("Start Timer");
        stop = new JButton("Stop Timer");
        final JLabel timerLabel = new JLabel("   ...Waiting...   ");
        submit = new JButton("Done");

        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();
        }
    }

}

1 个答案:

答案 0 :(得分:0)

JTextField可以使用setEditable(false)设置为不可编辑。您也可以使用JLabels