منتدى مصر التقني
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

[Swing]إنشاء قائمة JPopupMenu شفافة

اذهب الى الأسفل

[Swing]إنشاء قائمة JPopupMenu شفافة  Empty [Swing]إنشاء قائمة JPopupMenu شفافة

مُساهمة من طرف السنى الأربعاء أكتوبر 02, 2019 3:44 pm

كود جميل لانشاء قائمة شفافة 

الكود:


class TranslucentPopupMenu extends JPopupMenu {
  private static final Color ALPHA_ZERO = new Color(0x0, true);
  private static final Color POPUP_BACK = new Color(250, 250, 250, 200);
  private static final Color POPUP_LEFT = new Color(230, 230, 230, 200);
  private static final int LEFT_WIDTH = 24;

  @Override public boolean isOpaque() {
    return false;
  }

  @Override public void updateUI() {
    super.updateUI();
    if (Objects.isNull(UIManager.getBorder("PopupMenu.border"))) {
      setBorder(new BorderUIResource(BorderFactory.createLineBorder(Color.GRAY)));
    }
  }

  @Override public Component add(Component c) {
    if (c instanceof JComponent) {
      ((JComponent) c).setOpaque(false);
    }
    return c;
  }

  @Override public JMenuItem add(JMenuItem menuItem) {
    menuItem.setOpaque(false);
    // menuItem.setBackground(ALPHA_ZERO);
    return super.add(menuItem);
  }

  @Override public void show(Component c, int x, int y) {
    EventQueue.invokeLater(() -> {
      Container p = getTopLevelAncestor();
      if (p instanceof JWindow) {
        System.out.println("Heavy weight");
        JWindow w = (JWindow) p;
        // if (System.getProperty("java.version").startsWith("1.6.0")) {
        //   w.dispose();
        //   if (AWTUtilities.isWindowOpaque(w)) {
        //     AWTUtilities.setWindowOpaque(w, false);
        //   }
        //   w.setVisible(true);
        // }
        w.setBackground(ALPHA_ZERO);
      } else {
        System.out.println("Light weight");
      }
    });
    super.show(c, x, y);
  }

  @Override protected void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D) g.create();
    g2.setPaint(POPUP_LEFT);
    g2.fillRect(0, 0, LEFT_WIDTH, getHeight());
    g2.setPaint(POPUP_BACK);
    g2.fillRect(LEFT_WIDTH, 0, getWidth(), getHeight());
    g2.dispose();
    // super.paintComponent(g);
  }
}


النتيجة :

[Swing]إنشاء قائمة JPopupMenu شفافة  TranslucentPopupMenu
السنى
السنى
........
........

تاريخ التسجيل : 18/02/2011
المساهمات : 249
النقاط : 465
التقيم : 26
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى