选择时更改JButton的颜色,&在JFormattedTextField上设置掩码?

时间:2010-11-26 19:28:55

标签: java user-interface swing jbutton jformattedtextfield

我正在编写我的第一个Java程序(在Netbeans中)而且我迷路了。我有2个问题,如果有人能够帮助我的话。

以下是该计划应该做的事情:

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

电子邮件命令将在用户单击“输入”按钮后命令,然后用户在弹出窗口中单击“确定”,要求用户确认要通过电子邮件发送的消息。至于我的第三个问题,它是关于电子邮件的部分,我想这将是另一个线程,因为我得到这个按钮&文字字段的东西熨平了。

这是我到目前为止的触摸屏用户界面的图片: (不能以新手形式发布图片,请访问krisbunda.com/gui.png获取此图片)

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

我可以在按钮的父JPanel上放置一个mouselistener来监听子项上的点击事件(4个状态JButtons),然后无论上次点击哪个按钮,它都会变成蓝色带白色文字吗?请指出我正确的方向。

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

当我尝试在场地上放置一个“#####”的面具时,当我按下数字键盘的按钮时,它只会发出警告声。目前我选择了“Category:number”和“Format:custom”,然后在“Format:”字段中键入“#####”。这允许我点击数字按钮并查看他们显示的文本,但它不会阻止我输入超过5个字符。

我是通过“Properties> FormatterFactory”对话框执行此操作的。屏幕截图如下所示: (转到krisbunda.com/text-formatterFactory.png查看此图片)

这是我到目前为止的代码: (我的帖子对于这段代码太长了,所以请访问:krisbunda.com/java-sampleCode.txt查看)

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

  1. ActionListener是更常用的按钮方法,如How to Use Buttons, etc中所述。此FocusListener中也使用的example是以您描述的方式更改按钮外观的一种方法。

  2. 仅显示JFormattedTextField问题的sscce会更有帮助。可以在文章How to Use Formatted Text Fields中找到几个这样的例子。

答案 1 :(得分:1)

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

编辑:在此处添加代码以回复您的评论...

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

有更好的方法可以对此进行编码,包括使用enums等,但这应该适合您:

// 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