ارسم Jbutton لتبدو وكأنه JLabel (أو على الأقل بدون حافة الزر؟)

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

  •  26-09-2019
  •  | 
  •  

سؤال

لقد حصلت على jbutton لأسباب مختلفة أريد أن أتصرف مثل زر ، لكن يبدو وكأنه JLabel. ليس من الضروري في الواقع أن يكون Jlabel أسفل الغطاء ، لا أريد ظهور حافة الزر التي تم رفعها.

هل هناك طريقة سهلة لإيقاف "مظهر الزر" لـ JButtons ولكن الحفاظ على جميع وظائف الزر؟

كان بإمكاني بناء نوع من Hyperbutton المكون من الفئة الفرعية التي تم تفويضها إلى JLabel لأغراض العرض ، لكنني آمل حقًا أن يكون هناك شيء على طول خطوط button.lookLikeAButton(false).

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

المحلول

سترغب في القيام بما يلي:

        setFocusPainted(false);
        setMargin(new Insets(0, 0, 0, 0));
        setContentAreaFilled(false);
        setBorderPainted(false);
        setOpaque(false);

قد ترغب في استبعاد setFocusPainted(false) إذا كنت تريد أن ترسم التركيز فعليًا (مثل حدود الخط المنقط على Windows Look and Feel).

لقد استخدمت الكود أعلاه في الحالات التي أردت فيها زر "رمز فقط".

نصائح أخرى

اضبط لون الخلفية على شفاف ، والحدود إلى مثيل فارغ.

على سبيل المثال

   JButton button = new JButton();
   button.setBackground(null);
   button.setOpaque(false);
   button.setBorder(new EmptyBorder());

سيظل النص يتحرك لأعلى ولأسفل أثناء النقر فوق الزر ، ويمكن أن يكون الزر "مسلحًا" من خلال النقر فوقها وضغطها و "نزع سلاحها" عن طريق تحريك الماوس من منطقة الزر.

إذا كنت لا تريد هذا السلوك ، فربما لا ترغب في استخدام زر ، واستخدام تسمية حقيقية بدلاً من ذلك.

button.setBorderPainted( false );
button.setContentAreaFilled( false ); // ?
 setContentAreaFilled(false);
 setBorderPainted(false);
 setOpaque(false);

هذه الخطوط الثلاثة تفعل الخدعة.

قد يكون من الأسهل في الواقع فقط إضافة مستمع الماوس إلى JLabel؟ يمكنك ضبط الألوان على mousepracted و mousereles ، والتعامل مع المعالجة الخاصة بك على mouseclicked؟

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