매개 변수 (x 및 y)가 필요하므로 익명 사용자 대신 사용자 지정 클래스를 먼저 만들어야합니다.
private static class ButtonMouseListener extends MouseAdapter {
private final int x;
private final int y;
public ButtonMouseListener(int x, int y) {
this.x = x;
this.y = y;
}
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1) {
JOptionPane.showMessageDialog(null, "Left -> " + x + " | " + y);
} else if (e.getButton() == MouseEvent.BUTTON3) {
JOptionPane.showMessageDialog(null, "Right -> " + x + " | " + y);
}
}
}
그런 다음 다음과 같은 코드를 사용할 수 있습니다
모두의
for (int y = 0; y < y_length; y++) {
for (int x = 0; x < x_length; x++) {
buttons[x][y] = new JButton("X");
buttons[x][y].addMouseListener(new ButtonMouseListener(x, y));
mines_array.add(buttons[x][y]);
}
}
이 재미 있습니다. 버튼 크기와 관련하여 부모 컨테이너에서 레이아웃을 사용하는 경우 해당 레이아웃의 크기는 자동으로 계산되며 setSize()를 사용하여 변경할 수 없습니다. 광산
1)을 넣고 잘 사용된다. 2) 질의마다 하나의 질문을하는 것이 가장 좋습니다. 3) 레이아웃 관리자는 일반적으로 크기를 초과하는 구성 요소의 기본 크기를 존중합니다. 4) 오류 메시지 및 예외 출력을 복사/붙여 넣기하고 코드 형식을 사용하십시오. 5) ActionListener가이 GUI의 버튼에 더 잘 맞을 수 있습니다. 그것은 무엇을합니까? –
x와 y가 루프에서 계속 변하기 때문에 '최종'을 만들 수 없습니다. 당신이 할 수있는 일 (하지만 못생긴 해킹인데, 그걸 내가 답으로 쓰지 않는 이유입니다)은 중첩 된 루프 안에 선언되어 있습니다 :'final int x2 = x; final int y2 = y' 그리고 리스너 안에서'x2'와'y2'를 참조하십시오. Andrew가 방금 말했듯이,'ActionListener'는 더 적절하고 크기 대신 preferredSize를 설정합니다. –