يمكن أن تتأرجح يقول لي إذا كان هناك تلميح الأدوات النشط؟

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

  •  11-07-2019
  •  | 
  •  

سؤال

هل هناك طريقة elegantish في سوينغ لمعرفة ما إذا كان هناك أي تلميحات التي يتم عرضها حاليا في إطار بلدي؟

وأنا باستخدام تلميحات الأدوات المخصصة، لذلك سيكون من السهل جدا لوضع العلم في بلدي طريقة createToolTip()، ولكن لا استطيع ان ارى وسيلة لمعرفة متى ذهب تلميح الأدوات.

وToolTipManager لديه علم لطيفة لهذا، tipShowing، ولكن بالطبع انها private وأنهم لا يبدو أن توفر وسيلة للوصول الى ذلك. hideWindow() لا يدعو إلى عنصر تلميح الأدوات (أستطيع أن أقول)، ولذا فإنني لا أرى الطريق إلى هناك.

وأي شخص يحصل على أي أفكار جيدة؟

تحديث: ذهبت مع انعكاس. يمكنك رؤية الشفرة هنا:

private boolean isToolTipVisible() {
    // Going to do some nasty reflection to get at this private field.  Don't try this at home!
    ToolTipManager ttManager = ToolTipManager.sharedInstance();
    try {
        Field f = ttManager.getClass().getDeclaredField("tipShowing");
        f.setAccessible(true);

        boolean tipShowing = f.getBoolean(ttManager);

        return tipShowing;

    } catch (Exception e) {
        // We'll keep silent about this for now, but obviously we don't want to hit this
        // e.printStackTrace();
        return false;
    }
}
هل كانت مفيدة؟

المحلول

ويبدو أن الخاصية ISENABLED () من hideTipAction يرتبط مباشرة إلى منطقية tipShowing. هل يمكن أن حاول هذا:

public boolean isTooltipShowing(JComponent component) {
    AbstractAction hideTipAction = (AbstractAction) component.getActionMap().get("hideTip");
    return hideTipAction.isEnabled();
 }

وربما كنت تريد القيام ببعض التعقل التحقق من وجود بلا قيم، وما إلى ذلك ولكن هذا يجب أن تحصل على وثيقة جدا.

وتحرير، لردودكم:

وقصيرة من بعض رمز انعكاس القبيح، وأنا لا أعتقد أن لديك الكثير من الخيارات. لا يمكنك فئة فرعية ToolTipManager بسبب المنشئ الخاص الحزمة، وshowTipWindow() وhideTipWindow() وحزم أيضا القطاع الخاص، وبالتالي فإن نمط محول هو الخروج كذلك.

نصائح أخرى

ويبدو أن سوف يتطلب حلقات على كل من المكونات لمعرفة ما إذا كان لديهم تلميح الأدوات. أنا أبحث عن قيمة عالمية. ومن المحتمل أن يكون حلقة هي قابلة للتنفيذ، ولكن يبدو غير فعال.

وهذا أمر سيئ للغاية. بعد نقاش داخلي، "انعكاس القبيح" هو ما توصلنا مع كذلك، ولكن كنت اتمنى شخص كان هناك فكرة أفضل.

ومنذ لديك بالفعل createToolTip بنفسك ()، وربما يمكنك أن تجرب شيئا من هذا القبيل:)

public JToolTip createToolTip() {
  JToolTip tip = super.createToolTip();
  tip.addAncestorListener( new AncestorListener() {
    public void ancestorAdded( AncestorEvent event ) {
      System.out.println( "I'm Visible!..." );
    }

    public void ancestorRemoved( AncestorEvent event ) {
      System.out.println( "...now I'm not." );
    }

    public void ancestorMoved( AncestorEvent event ) { 
      // ignore
    }
  } );
  return tip;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top