1

私は aaJPanelを 9 つJLabels持っており、それらはすべてsetBackground()白の色で、クラスにマウス リスナー インターフェイスが実装されています。私の目的は、マウスの領域で左クリックするJLabelと、色が黒に、またはその逆に変わることです。マウスイベントを扱うのはこれが初めてで、行き詰まっています。私は全体のコンセプトを正しく理解していないようです。ここで私を助けてくれませんか?前もって感謝します!ところで、プロセスを使用する場合for-loop、プロセスが非常に簡単になることは理解していますが、より困難な方法で実行できるかどうかを知りたいだけです. 乾杯!

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

class TilePanelA extends JPanel implements MouseListener
{
JLabel label1;
JLabel label2;
JLabel label3;
JLabel label4;
JLabel label5;
JLabel label6;
JLabel label7;
JLabel label8;
JLabel label9;


public TilePanelA() 
{
    this.setLayout(new GridLayout(3, 3));
    Dimension labelSize = new Dimension(300, 300);

    label1 = new JLabel();
    label2 = new JLabel();
    label3 = new JLabel();
    label4 = new JLabel();
    label5 = new JLabel();
    label6 = new JLabel();
    label7 = new JLabel();
    label8 = new JLabel();
    label9 = new JLabel();

    label1.setPreferredSize(labelSize);
    label2.setPreferredSize(labelSize);
    label3.setPreferredSize(labelSize);
    label4.setPreferredSize(labelSize);
    label5.setPreferredSize(labelSize);
    label6.setPreferredSize(labelSize);
    label7.setPreferredSize(labelSize);
    label8.setPreferredSize(labelSize);
    label9.setPreferredSize(labelSize);

    label1.setBackground(Color.WHITE);
    label2.setBackground(Color.WHITE);
    label3.setBackground(Color.WHITE);
    label4.setBackground(Color.WHITE);
    label5.setBackground(Color.WHITE);
    label6.setBackground(Color.WHITE);
    label7.setBackground(Color.WHITE);
    label8.setBackground(Color.WHITE);
    label9.setBackground(Color.WHITE);

    label1.setOpaque(true);
    label2.setOpaque(true);
    label3.setOpaque(true);
    label4.setOpaque(true);
    label5.setOpaque(true);
    label6.setOpaque(true);
    label7.setOpaque(true);
    label8.setOpaque(true);
    label9.setOpaque(true);

    this.add(label1);
    this.add(label2);
    this.add(label3);
    this.add(label4);
    this.add(label5);
    this.add(label6);
    this.add(label7);
    this.add(label8);
    this.add(label9);

    label1.addMouseListener(this);
    label2.addMouseListener(this);
    label3.addMouseListener(this);
    label4.addMouseListener(this);
    label5.addMouseListener(this);
    label6.addMouseListener(this);
    label7.addMouseListener(this);
    label8.addMouseListener(this);
    label9.addMouseListener(this);  
} // end of constructor

public void mousePressed(MouseEvent e)
{
    if (e.getSource() == Color.WHITE)
    {
        setBackground(Color.BLACK);
    } else
    {
        setBackground(Color.WHITE);
    }
}

public void mouseReleased(MouseEvent e)
{
}

public void mouseEntered(MouseEvent e)
{
}

public void mouseExited(MouseEvent e)
{
}

public void mouseClicked(MouseEvent e)
{
}
}
4

1 に答える 1

3

e.getSource()そのラベルの色ではなく、クリックされたラベルを返します(とにかく、あなたの例では)

したがって、ラベルにキャストします。

JLabel theLabel = (JLabel) e.getSource();

次に、Background を適切に設定します。

if (theLabel.getBackground().equals(Color.WHITE)) theLabel.setBackgound(...);

于 2014-07-21T19:44:06.040 に答える