سؤال

أقوم بتطوير تطبيق سطح المكتب Java. في ذلك لدي 4 JButtons على JPanel. الآن أريد أنه كلما تم النقر على زر ما ، يتغير لون الخلفية إلى بعض الألوان الأخرى (على سبيل المثال البرتقالي) لتمثيل أنه تم النقر عليه وإعادة ضبط لون الخلفية لجميع الأزرار الثلاثة الأخرى إلى لونها الافتراضي (في حالة وجود أي منها برتقالي لون الخلفية).

لذلك ، في وقت واحد يمكن أن يكون للزر واحد فقط اللون البرتقالي.

النهج الحالي الذي قمت بتطبيقه هو أنني قمت بتطبيق الكود التالي في xxxActionPerformed() طريقة jbutton button1

button1.setBackground(Color.Orange);
button2.setBackground(Color.Gray);
button3.setBackground(Color.Gray);
button4.setBackground(Color.Gray);

وبالمثل للباقي ثلاثة أزرار.

الآن في الواقع ، لا أريد لون Backgroud مثل اللون الرمادي (للزر غير المحمص). بدلاً من ذلك ، أريد لون الخلفية الافتراضي بحيث يضبط اللون الخلفي على مظهر واجهة المستخدم الرسومية وفقًا لمظهر وملء منصة المستخدم النهائي.

س 1. كيف يمكنني الحصول على لون الخلفية الافتراضي؟

س 2. هل هذا هو النهج الصحيح للقيام بذلك أم أن هناك أي آلية أخرى يمكنني من خلالها تجميع جميع الأزرار الأربعة في مجموعة زر بحيث يمكن للمرء فقط الحصول على الخاصية المحددة في وقت واحد (مثل أزرار الراديو)؟

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

المحلول

  1. فقط استخدم null لاستخدام اللون الافتراضي:

    button1.setBackground(Color.ORANGE);
    button2.setBackground(null);
    ...
    
  2. فكر في استخدام jtogglebuttons مع buttongroup ، وضبط الرمز و pressedicon من الأزرار. لا حاجة لتغيير لون الخلفية.

    button1 = new JToggleButton(new ImageIcon("0.jpg"));
    button1.setSelectedIcon(new ImageIcon("1.jpg"));
    button2 = new JToggleButton(new ImageIcon("0.jpg"));
    button2.setSelectedIcon(new ImageIcon("2.jpg"));
    ...
    ButtonGroup group = new ButtonGroup();
    group.add(button1);
    group.add(button2);
    ...
    

نصائح أخرى

يمكنك الحصول على لون الخلفية القياسي للأزرار من Uimanager:

button1.setBackground(UIManager.getColor("Button.background"));

على حد علمي ، يمكن أن تتغير المفاتيح في مظهر ومظهر مختلف. إليك تطبيق WebStart لطيف يوضح جميع المفاتيح المتاحة:

http://tips4java.wordpress.com/2008/10/09/uimanager-defaults/

إليك مقطع عرضي من "button.background" بناءً على هذا مثال:

*** Metal javax.swing.plaf.metal.MetalLookAndFeel 636 entries
Button.background: javax.swing.plaf.ColorUIResource[r=238,g=238,b=238]

*** Nimbus com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel 1052 entries
Button.background: com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel$NimbusProperty@60961dff

*** CDE/Motif com.sun.java.swing.plaf.motif.MotifLookAndFeel 550 entries
Button.background: javax.swing.plaf.ColorUIResource[r=174,g=178,b=195]

*** Mac OS X com.apple.laf.AquaLookAndFeel 705 entries
Button.background: com.apple.laf.AquaNativeResources$CColorPaintUIResource[r=238,g=238,b=238]

Q1: للحصول على لون واجهة المستخدم الرسومية للزر ، فقط قم بذلك

button1.setBackground(Color.Orange);
button2.setBackground(java.awt.SystemColor.control);
button3.setBackground(java.awt.SystemColor.control);
button4.setBackground(java.awt.SystemColor.control);

باستخدام هذه الفئة (java.awt.systemcolor.*) ، يمكنك الحصول على لون جميع عناصر واجهة المستخدم الخاصة بك.

س 2: لم أسمع قط عن أزرار التجميع. بعد ذلك ، لا يمكنني الرد عليك.

أتمنى أن يساعد ذلك.

إذا كنت ترغب في أن تتمكن من إعادة تصميم وزارة واجهة المستخدم بالكامل

public class buttonUI extends javax.swing.plaf.basic.BasicButtonUI{

buttonUI(JButton b){
    b.setContentAreaFilled(false);
}

@Override
    public void paint(Graphics g,JComponent c){
             Graphics2D g2d = (Graphics2D) g;
             g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
             AbstractButton b = (AbstractButton) c;
             g2d.setFont(font.deriveFont(11f));
             Dimension d = b.getSize();
             FontMetrics fm = g2d.getFontMetrics();
             g2d.setColor(new Color(100,100,100));
             String caption = b.getText();
             int x = (d.width - fm.stringWidth(caption)) / 2;
             int y = (d.height + fm.getAscent()) / 2 - 2;
             g2d.drawString(caption, x, y);        
        }   }

وفي قطعة الرمز الرئيسية تستخدم مثل

jButton1.setUI(new buttonUI(jButton1));

هذه الطريقة التي أستخدمها .. يمكنك الحصول على طريقتك الخاصة أيضًا

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

public Jbutton decorateButton(JButton b, boolean isHoveredOver){
    if(isHoveredOver)
        b.setBackground(getContentPane().getBackground().GREEN);
    return b;
}

يمكنك تسمية هذه الطريقة من أساليب mouseevent أو actionevent وإصدار إعادة إعادة () بعد. ضع جميع الأزرار في صفيف أو متجه وحلقة من خلالها مرارًا على كل واحدة في طريقة تزين BeAtton وقم بإعطاء القيمة المنطقية لبطولة False ثم قم بتعيينها إلى True. وبهذه الطريقة تكون القيمة الأولية افتراضية ثم يتم تزيين الزر عند العمل ، سيبدو الأزرار تعمل كجزء من مجموعة

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