Это дополнительный вопрос к моему предыдущему вопросу. Я пытаюсь решить проблему в предыдущем вопросе. ссылка
Я кодирую игру-головоломку с изображением, и одна часть кода предназначена для сравнения частей, выбранных пользователем, с частями правильного изображения.
Каждая часть изображения уже добавлена в JButton как ImageIcon.
Идентификатор необходим для различения каждой части изображения, а также для сравнения.
Я устанавливаю setName() для каждой JButton, созданной в качестве идентификатора.
Сравнение начинается, когда пользователь перемещает курсор мыши на определенную координату кнопки на другой сетке 3x3, когда пользователь перетаскивает элементы из исходной сетки 3x3.
Отредактировано: Отредактированный код помечен. Кажется, у Flex есть метод, который может обнаруживать объект, находящийся под курсором, есть ли он у java? Ссылка ^ getSource() решает указанную выше проблему.
Однако, когда я попытался system.out.println
посмотреть, когда кнопка запускает getName()
, оказалось, что она не запускается, когда я перетаскиваю части на кнопку; чтобы активировать getName()
, я должен еще раз навести курсор на кнопку после перетаскивания фрагментов изображения на кнопку =/ .
private int mouseX,mouseY;
private JButton[] button = new JButton[9];
private JButton[] userarea = new JButton[9];
// setName for each of the 9 buttons in the original 3x3 grid being created
// which stores the shuffled puzzle pieces
for(int a=0; a<9; a++){
button[a] = new JButton(new ImageIcon());
id += Integer.toString(++cc);
button[a].setName(id);
}
// create 9 buttons for the user to place the puzzle pieces to
for(int b=0; b<9; b++){
userarea[b] = new JButton();
id2 += Integer.toString(++cc2);
// setName for each button (as unique id)
userarea[b].setName(id2);
TransferHandler transfer1 = new TransferHandler("icon");
userarea[b].setTransferHandler(transfer1);
//<--- EDITED CODE ------>
ChangeListener clistener = new ChangeListener(){
public void stateChanged(ChangeEvent ce) {
JButton source = (JButton)ce.getSource();
ButtonModel mod = source.getModel();
if (mod.isRollover()){
System.out.println(source.getName());
}
else{
}
}
};
//<--- EDITED CODE ------>
}
public void nameOfDestButton() {
// not sure how to do this
if(mouseCoordinate == getBounds of one of the buttons){
userarea[appropriate button number].getName();
}
}
public void mouseMoved(MouseEvent m){
mouseX=m.getX();
mouseY=m.getY();
nameOfDestButton();
// not sure how to do this. Obtaining a return value of getName
// in the nameOfDestButton() method ?
if (m.getComponent().getName().equals(nameOfDestButton) {
}
else{
JOptionPane.showMessageDialog(null,"Wrong! Try Again.");
}
}
isRollOver()
верно)? - person Hovercraft Full Of Eels   schedule 23.01.2013SwingUtilities.convertPoint
- person MadProgrammer   schedule 23.01.2013Rectangle
экземплярами. Попробуйте сделать это с помощью всего 2! Замените сетку 3x3 на 2x2, чтобы получить на 5 меньше того, что требуется. и Т. Д. - person Andrew Thompson   schedule 23.01.2013isRollOver
не может знать, на какую именно кнопку он нажал. - person iridescent   schedule 23.01.2013getsource()
объекта ChangeEvent слушателя изменений вернет ссылку на модель слушателя. Вы должны быть в состоянии выяснить, как кодировать это. - person Hovercraft Full Of Eels   schedule 24.01.2013