import java.awt.PopupMenu;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JComponent;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import java.util.LinkedList; import java.awt.Color;
import javax.swing.BorderFactory;
import javax.swing.border.Border; import javax.swing.JOptionPane;
public class GuiFieldPopupMenuListener implements MouseListener, ActionListener {
protected GuiField field;
protected BoardManager boardManager;
public GuiFieldPopupMenuListener(GuiField field, BoardManager bM) {
this.field = field;
this.boardManager = bM;
}
protected JPopupMenu createPopupMenu () {
JPopupMenu m = new JPopupMenu();
JMenuItem mi;
for (int i = 0; i < boardManager.getField(Structure.BOX, field.getBoxIndex(), field
.getFieldIndex()).getRemainingPos().size(); i++) {
mi = new JMenuItem(String.valueOf(boardManager.getField(Structure.BOX, field.getBoxIndex(), field
.getFieldIndex()).getRemainingPos().get(i)));
mi.addActionListener(this);
m.add(mi);
}
return m;
}
public void mouseClicked(MouseEvent arg0) {
if (!boardManager.getField(Structure.BOX, field.getBoxIndex(),
field.getFieldIndex()).isInitialSet()) {
createPopupMenu().show(arg0.getComponent(), arg0.getX(),
arg0.getY());
}
}
public void mouseEntered (MouseEvent arg0) {
if (!boardManager.getField(Structure.BOX, field.getBoxIndex(),
field.getFieldIndex()).isInitialSet()) {
oldBorder = field.getBorder();
field.setBorder(BorderFactory.createLineBorder(Color.ORANGE,
EMPH_BORDER_THICKNESS));
}
}
public void mouseExited (MouseEvent arg0) {
if (!boardManager.getField(Structure.BOX, field.getBoxIndex(),
field.getFieldIndex()).isInitialSet()) {
field.setBorder(oldBorder);
}
}
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void actionPerformed (ActionEvent arg0) {
if (!boardManager.trySetField(Structure.BOX, field.getBoxIndex(), field
.getFieldIndex(), new Field(Integer.parseInt(arg0
.getActionCommand()))))
JOptionPane.showMessageDialog(null, "Invalid state reached! Last action was undone.");
}
private static final int EMPH_BORDER_THICKNESS = 4;
Border oldBorder;
}