今日、私は問題を抱えています。私のプログラムは8x8グリッドを作成し、JButton
をクリックすると座標を表示します。
しかし、JButton
の使用を拒否し、JPanel
を使用する必要があります。しかし、私のaddMouseListener
が機能しないので、それを修正する方法がわかりません4時間から検索しています。
package coordboutons;
import Java.awt.*;
import Java.awt.event.*;
import javax.swing.*;
public class CoordBoutons extends JFrame {
CoordBoutons() {
super("GridLayout");
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container contenant = getContentPane();
contenant.setLayout(new GridLayout(8, 8));
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++)
contenant.add(new CaseEchiquier(i, j));
pack();
setVisible(true);
}
**class CaseEchiquier extends JPanel** {
private int lin, col;
CaseEchiquier(int i, int j) {
lin = i;
col = j;
setPreferredSize(new Dimension(80, 75));
setBackground((i + j) % 2 == 0 ? Color.WHITE : Color.GRAY);
addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
System.out.println((char)('a' + col) + "" + (8 - lin));
}
});
}
}
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
CoordBoutons coordBoutons = new CoordBoutons();
}
}
JPanel
にはActionListener
機能がありません。代わりに、MouseListener
を使用する必要があります
import Java.awt.Color;
import Java.awt.Container;
import Java.awt.Dimension;
import Java.awt.EventQueue;
import Java.awt.GridLayout;
import Java.awt.event.MouseAdapter;
import Java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class CoordBoutons extends JFrame {
CoordBoutons() {
super("GridLayout");
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container contenant = getContentPane();
contenant.setLayout(new GridLayout(8, 8));
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
contenant.add(new CaseEchiquier(i, j));
}
}
pack();
setVisible(true);
}
class CaseEchiquier extends JPanel {
private int lin, col;
CaseEchiquier(int i, int j) {
lin = i;
col = j;
setPreferredSize(new Dimension(80, 75));
setBackground((i + j) % 2 == 0 ? Color.WHITE : Color.GRAY);
addMouseListener(new MouseAdapter() {
private Color background;
@Override
public void mousePressed(MouseEvent e) {
background = getBackground();
setBackground(Color.RED);
repaint();
}
@Override
public void mouseReleased(MouseEvent e) {
setBackground(background);
}
});
// addActionListener(new ActionListener() {
// public void actionPerformed(ActionEvent evt) {
// System.out.println((char) ('a' + col) + "" + (8 - lin));
//
// }
// });
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame.setDefaultLookAndFeelDecorated(true);
CoordBoutons coordBoutons = new CoordBoutons();
}
});
}
}
詳細については、 マウスリスナーの作成方法 を参照してください...
問題は、メソッドaddActionListener
がJPanelに存在しないことです。この場合、適切なリスナーを使用する必要があります(Java.awt.event.MouseListener
)。 MouseListener
はインターフェイスであるため(そのメソッドのすべてを実装する必要はありません)、次のようにMouseAdapter
を使用して、必要なメソッドのみをオーバーライドできます。
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println((char)('a' + col) + "" + (8 - lin));
}
});