【问题标题】:Take input through Buttons in java通过java中的按钮获取输入
【发布时间】:2010-06-03 07:57:49
【问题描述】:

我知道标题可能描述性不够,但我正在用 Java 制作一个魔方游戏,基本上,我正在尝试复制数独游戏中的用户输入:http://www.websudoku.com/

我有一个 n x n 的按钮网格(不是 JButton)作为板,我希望用户能够做的是当用户单击其中一个按钮时,类似于上面的游戏,它允许用户在按钮本身中输入他的猜测,而不是弹出一个带有某种输入字段的对话框。

我不知道从哪里开始,我是 Java 的初学者(不是很初学者,但我对各种 Java API 的了解非常有限),所以我想知道这是否可行并且如果是,我将如何去做?谢谢你的帮助。


我不知道这是否属于 cmets 或答案,但我将其发布为上一个问题的扩展。谢谢你们两位的帮助。

我基本上已经实现了我打算通过该计划做的事情。但是现在,我想通过让它以多线程方式运行来使它变得更好。对于这样一个魔方程序的哪些方面可以委派给单独的线程,你们中的任何人有什么建议吗?

到目前为止,程序所做的是:提示用户输入正方形大小 > 构建 n x n 网格,当用户单击开始按钮时,它开始为用户计时。当用户输入一个新条目时,板子会不断更新每一行、每一列和对角线的总数,并更新相应的框。最后,当检查成功的魔方板结果为真时,它会禁用所有文本字段并让用户开始新游戏或退出。

再一次,虽然我已经用 Java 编程了一段时间,但我的知识非常有限,现在,我想了解像这样的简单程序,虽然它们在单线程上运行良好,但可以在多线程中构建方法。

最后,我检查了运行程序时使用的内存(基本上是通过 windows 中的任务管理器,在 javaw.exe 下查看),对于 19 x 19 的网格,它显示大约 19000K。这是太多了还是差不多正确,如果太多了,我该如何减少它?

非常感谢您的帮助。

【问题讨论】:

    标签: java button textfield


    【解决方案1】:

    我会避免这种 gui 设计,因为它不会像用户期望的那样工作。但是,如果你真的想要这种行为,我建议你从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);
    
        }
    }
    

    【讨论】:

      【解决方案2】:

      听起来你真正想要的是editable table,而不是按钮网格。您实际上可以将按钮用作 TableCellRenderer,将文本字段用作 TableCellEditor。

      【讨论】:

      • 感谢您的回复。我根本没有以这种方式考虑董事会。我也会研究可编辑的表格。顺便说一句,你是什么意思 gui 设计不会按照用户期望的方式工作?我觉得数独游戏的 gui 非常漂亮。
      • @stash211:我认为另一张海报的意思是人们希望按钮可点击,但不可编辑。他们可能会点击然后不知道该怎么做,除非您给出一个非常明显的视觉线索,表明用户现在应该输入文本。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      相关资源
      最近更新 更多