Java 选择后更改JButton的颜色(&;在JFormattedTextField上设置掩码?

Java 选择后更改JButton的颜色(&;在JFormattedTextField上设置掩码?,java,user-interface,swing,jbutton,jformattedtextfield,Java,User Interface,Swing,Jbutton,Jformattedtextfield,我正在写我的第一个Java程序(在Netbeans中),我迷路了。如果有人愿意帮助我,我现在有两个问题 以下是该程序应该做的: 选择4个“状态”选项中的1个,再加上5位数字(这两个项目都是用户通过触摸屏输入的),然后通过电子邮件将此信息发送给主题行为:“Item#[JFormattedTextField中的5位数字]当前是[4个可能的状态选项中的1个]。 电子邮件命令将在用户单击“回车”按钮后发出命令,然后用户单击弹出窗口上的“确定”,该弹出窗口要求用户确认将要发送的邮件。至于我的第三个问题,是

我正在写我的第一个Java程序(在Netbeans中),我迷路了。如果有人愿意帮助我,我现在有两个问题

以下是该程序应该做的:

选择4个“状态”选项中的1个,再加上5位数字(这两个项目都是用户通过触摸屏输入的),然后通过电子邮件将此信息发送给主题行为:“Item#[JFormattedTextField中的5位数字]当前是[4个可能的状态选项中的1个]。

电子邮件命令将在用户单击“回车”按钮后发出命令,然后用户单击弹出窗口上的“确定”,该弹出窗口要求用户确认将要发送的邮件。至于我的第三个问题,是关于电子邮件部分的,我想在我整理完这个按钮和文本字段之后,这将是另一个线程

以下是我迄今为止使用的触摸屏UI的图片: (无法以新手身份发布图像,请访问krisbunda.com/gui.png获取此图像)

问题1: 4个状态选项(4个JButtons)包装在一个JPanel中。我希望在“statusPanel”JPanel中按下最近的按钮,将背景更改为蓝色,按钮文本更改为白色。

我是否可以在按钮的父JPanel上放置一个鼠标侦听器,以侦听子按钮上的单击事件(4个状态JButtons),然后无论最后单击哪个按钮,它都会变成蓝色,同时显示白色文本?请为我指出正确的方向

问题2: 我有一个名为“display”的JFormattedTextField,它在单击时显示数字,这些数字是从名为“current”的StringBuffer追加的。我希望文本字段只接受总共5个数字。

当我试着在场地上放置一个“#######”的面具时,当我按下数字键盘的按钮时,它只会发出警告声。目前我选择了“类别:数字”和“格式:自定义”,然后在“格式:“外地。这允许我单击数字按钮并查看其显示的文本,但这并不能阻止我键入超过5个字符

我是通过“属性>格式化程序工厂”对话框来实现的。屏幕截图如下所示: (转到krisbunda.com/text-formatterFactory.png查看此图像)

以下是我目前掌握的代码: (我的帖子太长了,所以请访问:krisbunda.com/java-sampleCode.txt查看)

提前感谢您的帮助

  • 如中所述,
    ActionListener
    是按钮的更常见方法。A,也用于此,是按您描述的方式更改按钮外观的一种方法

  • 只显示您的
    JFormattedTextField
    问题会更有帮助。文章中可以找到几个这样的例子


  • 您的代码看起来很好,并且已经设置了字段来保存对所有按钮的引用,因此现在您只需要在状态设置按钮中编写代码,然后让它们调用具有新状态的子例程。然后,此子例程应将所有按钮重置为其默认颜色,然后在按钮上设置与新状态或现有状态相对应的特殊选定颜色

    编辑:在此处添加代码以响应您的评论

    首先,切勿将
    ==
    与字符串一起使用。您必须使用
    equals()
    否则,当您得到两个相同但不同的对象的字符串时,它们将不相同,比较将失败

    有更好的编码方法,包括使用
    enum
    等。但这应该适合您:

    // Reset all the buttons
    outsideNotReadyButton.setBackground(...);
    loadedButton.setBackground(...);
    outsideReadyButton.setBackground(...);
    shippedButton.setBackground(...);
    
    // Now set the one of the button's colors conditionally
    String status = ...
    
    if(status.equals("SHIPPED")) {shippedButton.setBackground(Color.BLUE);}
    else if(status.equals("LOADED")) {loadedButton.setBackground(Color.BLUE);}
    // ...and so on
    

    在我发布Stack Overflow之前,我阅读了您多次链接到的Oracle网站上的所有文章,但仍然无法将其组合在一起。我是否可以这样编写代码:if(status==“SHIPPED”){shippedButton.setBackground(Color.blue)}else{}?感谢您的帮助。。。不久前完成了那个项目,但总有一天会被添加到。。。我会记住你的代码,因为我确信我做得不同(可能不是最好的方式)。