LabelHint.java 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package ui.view;
  2. import javax.swing.JLabel;
  3. public class LabelHint implements Runnable {
  4. private JLabel label;
  5. private String original;
  6. private int remainingTime, defaultTime;
  7. private static final int DEFAULT_TIME=1000,//milliseconds
  8. DELAY=50;
  9. private boolean running=false,
  10. keepLength=true;
  11. public LabelHint(JLabel label){
  12. this(label, DEFAULT_TIME);
  13. }
  14. public LabelHint(JLabel label, int ms){
  15. this.label=label;
  16. original=label.getText();
  17. this.defaultTime=ms;
  18. setRemaining(ms);
  19. }
  20. public void go(String hint){
  21. //the keepLengthStuff should maybe be done by the caller
  22. if(keepLength&&hint.length()<original.length()){
  23. boolean right=true;
  24. while(hint.length()<original.length()){
  25. if(right)hint=hint+' ';
  26. else hint=' '+hint;
  27. right=!right;
  28. }
  29. }
  30. label.setText(hint);
  31. setRemaining(defaultTime);
  32. if(!running){
  33. running=true;
  34. new Thread(this).start();
  35. }
  36. }
  37. public void go(String hint, int ms){
  38. setRemaining(ms);
  39. go(hint);
  40. }
  41. private void setRemaining(int ms) {
  42. remainingTime=ms/DELAY;
  43. }
  44. public void setKeepLength(boolean b){
  45. keepLength=b;
  46. }
  47. @Override
  48. public void run() {
  49. while(running){
  50. remainingTime--;
  51. if(remainingTime==0)running=false;
  52. try {
  53. Thread.sleep(DELAY);
  54. } catch (InterruptedException e) {}
  55. }
  56. //This is supposed to catch one-in-a-million
  57. //cases of Thread anomalies.
  58. if(remainingTime!=0)go(label.getText());
  59. else label.setText(original);
  60. }
  61. public void reset() {
  62. label.setText(original);
  63. }
  64. }