فقط الماوس النقر فوق الحدث من Jlabel Update Jlabel Text Property بشكل صحيح

StackOverflow https://stackoverflow.com/questions/1686188

  •  18-09-2019
  •  | 
  •  

سؤال

أنا أستخدم مؤشر ترابط Java لتحديث قيمة نص Jlabel في طلبي، ولكن بعد تحديث النص على Jlabel Jlabel تظهر جميع القيم السابقة المحدثة والقيمة الجديدة بشكل دوري بالترتيب عبر المنعش نفسه

ولكن عندما أستخدم نفس وظيفة التحديث داخل حدث MouseClick من Jlabel، فإنه يقوم بتحميل نفسه كما كنت أتوقع وإظهار القيمة الأخيرة فقط

ما الذي يمكن أن يسبب هذه المشكلة أفتقد بعض الأساليب التي يدعوها حدث MouseClick داخليا؟

Nore: التطبيق هو Japplet

هل كانت مفيدة؟

المحلول

يجب عليك التأكد من إجراء أي تغييرات على مكونات Swing Ui على مؤشر ترابط الأحداث. فيما يلي اقتراحان لإنجاز هذا:

الموقت

قد ترغب في التحقق javax.swing.timer. إذا كان الهدف هو تحديث دوري JLabel نص. الحرائق الموقت ActionEventدوريا بشكل دوري في الحدث إرسال الموضوع:

  int delay = 1000; //milliseconds
  ActionListener taskPerformer = new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
          label.setText("foo");
      }
  };
  new Timer(delay, taskPerformer).start();

swingworker.

بدلا من ذلك قد ترغب في النظر في استخدام swingworker. لأداء معالجة الخلفية الخاصة بك. يمكن لخيوط خلفية العامل التواصل مع المعلومات مرة أخرى إلى مؤشر ترابط الحدث عن طريق الاتصال publish.

new SwingWorker<Void, String>() {
  // Called by the background thread.
  public Void doInBackground() {
    for (int i=0; i<100; ++i) {
      // Do work.  Periodically publish String data.
      publish("Job Number: " + i);
    }
  }

  // Called on the Event Dispatch Thread.
  @Override
  protected void process(List<String> chunks) {
    // Update label text.  May only want to set label to last
    // value in chunks (as process can potentially be called
    // with multiple String values at once).
    for (String text : chunks) {
      label.setText(text);
    }
  }  
}.execute();

نصائح أخرى

لست متأكدا بالضبط ما يحدث ولكني سأبدأ بالتأكد من حدوث التحديث الخاص بك في مؤشر ترابط الأحداث. احصل على مكالمة موضوع التحديث:

SwingUtilities.invokeLater(new Runnable() {
  public void run() {
    // ...update the text...
  }
});

انظر الحدث إرسال الموضوع الدورة التعليمية.

لماذا لا تحاول هذا:اسم الطابع. الرجاء (اسم الطابع.getvisibler ())؛

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top