سؤال

دعنا نقول أن لدي برنامجًا يحتوي على مجموعة ثنائية الأبعاد من الأزرار ، وعندما تنقر على أحدها يتحول إلى اللون الأحمر. لم أكن أرغب في إعلان كل زر واحد بشكل منفصل ، لذا قمت للتو بإنشاء صفيف Jbutton [] [] بالنسبة لهم. المشكلة هي أنني لا أعرف كيفية استخدام مستمع الإجراء على أي من الأزرار الموجودة في الصفيف بحيث يغير لون هذا الزر المحدد ، ولا يوجد أي من الأسئلة ذات الصلة ذات صلة بهذا. حاولت استخدام "لـ" ولكن لا يساعد ذلك:

package appli;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class MainW extends JFrame implements ActionListener {

    public MainW(){
        setSize(640,480);
        setTitle("title");
        setLayout(null);
        JButton[][] btnz = new JButton[5][5];
        for(Integer i=0;i<5;i++)
        {
            for(Integer j=0;j<5;j++)
            {
                btnz[i][j]= new JButton("");
                btnz[i][j].setBackground(Color.WHITE);
                btnz[i][j].setBounds(10+20*i,10+20*j,20,20);
                add(btnz[i][j]);
                btnz[i][j].addActionListener(this);
            }
        }
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e){
        for(Integer i=0;i<5;i++)
        {
            for(Integer j=0;j<5;j++)
            {
                if (e.getSource()==btnz[i][j]);
                {
                    btnz[i][j].setBackground(Color.RED);
                }
            }
        }
    }

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

المحلول

هل جربت:

public void actionPerformed(ActionEvent e){
   if( e.getSource() instanceof JButton) {
       ((JButton)e.getSource()).setBackground(Color.red);
   }
}

أحد أسباب عدم عمل الكود الخاص بك هو أن JButton[][] تستخدمها لإنشاء أزرارك محلية لك MainW البناء. سوف يسمح لك النهج الذي قدمته بتجاهل مشكلة النطاق هذه. سيقوم أيضًا بإزالة نهجك التكراري ، واستبداله بحل أكثر كفاءة. في الكود الخاص بك ، حتى إذا تم تشغيل الحدث بواسطة العنصر الأول في قائمتك ، أو حتى لا يتم تشغيله بواسطة أحد الأزرار الخاصة بك ، فسوف تتكرر دائمًا على صفيف ثنائي الأبعاد واختبار كل منهما.

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