Re: Entering a time into textbox
Salad wrote:
1) If I supply a default value to the text boxes, or leave as blank and
enter a value, it inserts the values, not overwrites the default. IOW,
if I enter 0 as a default, and go to that text box and enter 17, my
value is 170. I would expect a text box to overwrite the values else
press the Ins key to insert a value. How do I permit overwrite?
One way is to use 'setSelectionStart()' and 'setSelectionEnd()' to cover the
default value, as if the user had selected the value before overtyping it.
Just like user-driven entry, if the pre-set input is not selected, the new
typing will insert, not overwrite it. If you select the default entry then
type, you overwrite it.
2) I can move between the fields using the Tab key. But if I enter a
value and hit the Enter key, I stay within the same field. How does one
move to the next field if one hits the Enter key?
I don't know.
3) Same holds true with the Exit button. If I use the mouse on the
Exit button, the window closes. But if I tab to the Exit button then
press Enter, nothing.
I don't know.
4) Is there a reliable way to enter a time (hour/minute/maybe ampm)
field into a listbox? I haven't been exposed to what I would consider
an input mask in Java.
You can validate the input using a 'java.text.DateFormat' instance after
entry. I'm sure there are alternatives.
5) I used System.exit(0) to "close" the window. Is that what one does
to close windows?
Not really. Use 'javax.swing.JFrame#setDefaultCloseOperation()' with either
'JFrame.EXIT_ON_CLOSE' or 'javax.swing.WindowConstants.EXIT_ON_CLOSE' or
'javax.swing.WindowConstants.DISPOSE_ON_CLOSE' as the argument.
<http://java.sun.com/javase/6/docs/api/javax/swing/WindowConstants.html>
<http://java.sun.com/javase/6/docs/api/javax/swing/JFrame.html#EXIT_ON_CLOSE>
...
public static void main(String[] args)
{
MeterTime window = new MeterTime();
ALWAYS do GUI work on the Event Dispatch Thread (EDT), which you failed to do
here. Use 'javax.swing.SwingUtilities.invokeLater()' (or
'java.awt.EventQueue.invokeLater()').
<http://java.sun.com/javase/6/docs/api/javax/swing/SwingUtilities.html#invokeLater(java.lang.Runnable)>
<http://java.sun.com/javase/6/docs/api/java/awt/EventQueue.html#invokeLater(java.lang.Runnable)>
window.setVisible(true);
Ditto.
}
}
Don't write thread-unsafe code. *All* GUI work *must* happen on the EDT.
<http://java.sun.com/docs/books/tutorial/uiswing/concurrency/initial.html>
<http://java.sun.com/docs/books/tutorial/uiswing/concurrency/dispatch.html>
--
Lew