我知道标题可能描述性不够,但我正在用 Java 制作一个幻方游戏,基本上,我正在尝试复制数独游戏中的用户输入:http://www.websudoku.com/ .
我有一个 n x n 的按钮网格(不是 JButton)作为面板,我希望用户能够做的是当用户点击其中一个按钮时,类似于上面的游戏,它允许用户在按钮本身中输入他的猜测,而不是弹出一个带有某种输入字段的对话框。
我不知道从哪里开始,我是 Java 的初学者(不是很初学者,但我对各种 Java API 的了解非常有限),所以我想知道这是否可行并且如果是,我将如何着手去做?谢谢你的帮助。
我不知道这是否属于评论或答案,但我将其发布为对上一个问题的扩展。谢谢你们两位的帮助。
我基本上已经实现了我打算用这个程序做的事情。但是现在,我想让它以多线程方式运行,让它变得更好。对于可以将此类幻方程序的哪些方面委托(delegate)给单独的线程,你们中的任何人有任何建议吗?
到目前为止,该程序所做的是:提示用户输入正方形大小 > 构建 n x n 网格,当用户单击开始按钮时,它开始为用户计时。当用户输入新条目时,看板会不断更新每一行、每一列和对角线上的总数,并更新相应的框。最后,当对成功的魔方板的检查结果为真时,它会禁用所有文本字段并让用户开始新游戏或退出。
再一次,虽然我已经用 Java 编程了一段时间,但我的知识非常有限,现在,我想了解像这些简单的程序,虽然它们在单线程上运行良好,但可以在多线程中构建方式。
最后,我正在检查运行我的程序时使用的内存(基本上是通过 windows 中的任务管理器查看,在 javaw.exe 下),对于 19 x 19 的网格,它说大约 19000K。这是太多了还是差不多对了,如果太多了,我该如何减少呢?
非常感谢您的帮助。
最佳答案
我会避免这种图形用户界面设计,因为它不会像用户期望的那样工作。但是,如果您真的想要这种行为,我建议您从 JTextField
开始,然后给它一个 BevelBorder
。像这样:
JTextField tf = new JTextField();
tf.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
yourPanel.add(tf);
一个完整的 stub 程序可能看起来像这样:
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);
}
}
关于java - 通过java中的按钮获取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2964158/