Принять ввод через кнопки в Java - PullRequest
1 голос
/ 03 июня 2010

Я понимаю, что название может быть недостаточно описательным, но я делаю игру с магическим квадратом на Java и, в основном, я пытаюсь повторить пользовательский ввод, как в игре судоку здесь: http://www.websudoku.com/.

То, что у меня есть, это сетка тревожных кнопок (не JButton) в качестве доски, и я хочу, чтобы пользователь мог делать это, когда пользователь нажимает на одну из кнопок, аналогично игре выше, это позволяет пользователю ввести его предположение в самой кнопке вместо того, чтобы открыть диалоговое окно с полем ввода какого-либо рода.

Я не знаю, с чего начать, я новичок в Java (не очень начинающий, но мои знания по различным API Java очень ограничены), поэтому я пытаюсь выяснить, возможно ли это, и если это так, как бы я это сделал? Спасибо за любую помощь.


Я не знал, относится ли это к комментариям или ответам, но я публикую это как продолжение предыдущего вопроса. Спасибо вам обоим за помощь.

Я в основном достиг того, что намеревался сделать с программой. Но теперь я хочу сделать его лучше, если он будет работать многопоточно. У кого-нибудь из вас есть какие-либо предложения относительно того, какой аспект такой магической программы можно делегировать отдельным потокам.

На данный момент программа делает следующее: запрашивает у пользователя размер квадрата> строит сетку n x n, и когда пользователь нажимает кнопку запуска, он запускает синхронизацию пользователя. пока пользователь вводит новую запись, доска постоянно обновляет итоги по каждой строке, столбцу и диагонали и обновляет соответствующие поля. Наконец, когда проверка на успешность доски с магическими квадратами оказывается верной, она отключает все текстовые поля и позволяет пользователю начать новую игру или выйти.

Еще раз, хотя я некоторое время программировал на Java, мои знания очень ограничены, и сейчас я хочу понять, как простые программы, подобные этим, хотя они хорошо работают в одном потоке, могут быть встроены в многопоточный путь.

Наконец, я проверял память, используемую при запуске моей программы (в основном просматривая диспетчер задач в windows, под javaw.exe) и для сетки 19 x 19, это говорит о 19000K. Это слишком много или почти правильно, и если слишком много, как я могу уменьшить это?

Большое спасибо за любую помощь.

Ответы [ 2 ]

2 голосов
/ 03 июня 2010

Я бы избегал этого графического дизайна, так как он не будет работать так, как ожидает пользователь. Однако, если вы действительно хотите такое поведение, я предлагаю вам начать с JTextField и дать ему BevelBorder. Примерно так:

JTextField tf = new JTextField();
tf.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
yourPanel.add(tf);

Полная программа-заглушка может выглядеть примерно так:

import java.awt.*;

import javax.swing.*;
import javax.swing.border.*;

public class FrameTest {
    public static void main(String[] args) throws InterruptedException {

        JFrame jf = new JFrame("Demo");
        jf.getContentPane().setLayout(new GridLayout(9, 9, 3, 3));    

        for (int i = 0; i < 9*9; i++) {
            JTextField tf = new JTextField(1);
            tf.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
            tf.setBackground(new Color(230, 230, 230));
            tf.setHorizontalAlignment(JTextField.CENTER);
            tf.setFont(tf.getFont().deriveFont(20f));
            jf.add(tf);
        }

        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.pack();
        jf.setVisible(true);

    }
}

enter image description here

2 голосов
/ 03 июня 2010

Похоже, что вместо сетки кнопок вам действительно нужна редактируемая таблица . Вы могли бы фактически использовать кнопку как TableCellRenderer и текстовое поле как TableCellEditor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...