通过java中的按钮获取输入

通过java中的按钮获取输入,java,button,textfield,Java,Button,Textfield,我知道标题可能描述得不够详细,但我正在用Java制作一个魔方游戏,基本上,我正在尝试复制用户输入,就像在这里的数独游戏中一样: 我有一个n x n的按钮网格(不是JButton)作为棋盘,我希望用户能够做到的是,当用户点击其中一个按钮时,类似于上面的游戏,它允许用户在按钮本身中键入他的猜测,而不是弹出一个带有某种输入字段的对话框 我不知道从哪里开始,我是Java的初学者(不是很初学者,但我对各种Java API的知识非常有限),所以我试图找出这是否可行,如果可行,我将如何着手?谢谢你的帮助 我

我知道标题可能描述得不够详细,但我正在用Java制作一个魔方游戏,基本上,我正在尝试复制用户输入,就像在这里的数独游戏中一样:

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

我不知道从哪里开始,我是Java的初学者(不是很初学者,但我对各种Java API的知识非常有限),所以我试图找出这是否可行,如果可行,我将如何着手?谢谢你的帮助


我不知道这是否属于评论或答案,但我将此作为对上一个问题的扩展。谢谢你们两位的帮助

我已经基本实现了我计划要做的事情。但是现在,我想让它以多线程的方式运行,从而使它变得更好。对于这样一个魔方程序的哪些方面可以委托给不同的线程,你们有什么建议吗

到目前为止,该程序所做的是:提示用户输入square size>buildn x n网格,当用户单击开始按钮时,它开始计时用户。当用户输入新条目时,电路板会不断更新每行、每列和每对角线上的总数,并更新相应的方框。最后,当成功的魔方棋盘检查结果为真时,它将禁用所有文本字段,并允许用户开始新游戏或退出

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

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


非常感谢你的帮助

听起来你真正想要的不是一排按钮,而是一个按钮。实际上,您可以使用一个按钮作为TableCellRenderer,使用一个文本字段作为TableCellEditor。

听起来,您真正想要的是一个网格,而不是一个按钮。实际上,您可以使用一个按钮作为TableCellRenderer,使用一个文本字段作为TableCellEditor。

我会避免使用这种gui设计,因为它不会像用户期望的那样工作。但是,如果你真的想要这种行为,我建议你从一个
JTextField
开始,给它一个
bevelorder
。大概是这样的:

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

    }
}
完整的存根程序可能如下所示:

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

    }
}
import java.awt.*;
导入javax.swing.*;
导入javax.swing.border.*;
公共类框架测试{
公共静态void main(字符串[]args)引发InterruptedException{
JFrame jf=新JFrame(“演示”);
getContentPane().setLayout(新的GridLayout(9,9,3,3));
对于(int i=0;i<9*9;i++){
JTextField=新的JTextField(1);
tf.setboorder(BorderFactory.createBevelOrder(BevelOrder.RAISED));
挫折背景(新颜色(230、230、230));
tf.setHorizontalAlignment(JTextField.CENTER);
setFont(tf.getFont().deriveFont(20f));
jf.add(tf);
}
jf.setDefaultCloseOperation(JFrame.EXIT\u ON\u CLOSE);
jf.pack();
jf.setVisible(真);
}
}

我会避免这种gui设计,因为它不会像用户期望的那样工作。但是,如果你真的想要这种行为,我建议你从一个
JTextField
开始,给它一个
bevelorder
。大概是这样的:

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

    }
}
完整的存根程序可能如下所示:

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

    }
}
import java.awt.*;
导入javax.swing.*;
导入javax.swing.border.*;
公共类框架测试{
公共静态void main(字符串[]args)引发InterruptedException{
JFrame jf=新JFrame(“演示”);
getContentPane().setLayout(新的GridLayout(9,9,3,3));
对于(int i=0;i<9*9;i++){
JTextField=新的JTextField(1);
tf.setboorder(BorderFactory.createBevelOrder(BevelOrder.RAISED));
挫折背景(新颜色(230、230、230));
tf.setHorizontalAlignment(JTextField.CENTER);
setFont(tf.getFont().deriveFont(20f));
jf.add(tf);
}
jf.setDefaultCloseOperation(JFrame.EXIT\u ON\u CLOSE);
jf.pack();
jf.setVisible(真);
}
}

谢谢您的回复。我对董事会的想法完全不是那样的。我还将查看可编辑表。顺便说一句,你说gui设计不能按用户期望的方式工作是什么意思?我认为数独游戏的gui非常漂亮。@stash211:我认为另一张海报的意思是人们希望按钮可以点击,但不能编辑。他们可能会单击,然后不知道该做什么,除非你给出一个非常明显的视觉线索,表明用户现在需要输入文本。谢谢你的回复。我对董事会的想法完全不是那样的。我还将查看可编辑表。顺便说一句,你说gui设计不能按用户期望的方式工作是什么意思?我认为数独游戏的gui非常漂亮。@stash211:我认为另一张海报的意思是人们希望按钮可以点击,但不能编辑。他们可能会单击,然后不知道该做什么,除非您给出一个非常明显的视觉线索,即用户现在需要输入文本。