#java
#java
Вопрос:
Я хочу создать событие при нажатии на JLabel
, когда значение playertyp равно 1, как я могу это сделать? это класс
public class Draw_Board implements MouseListener,ActionListener
{
private Point matloc;
private ImageIcon partpic;
private JLabel partstick;
private boolean playerexis;
private int playertyp=0;
private boolean partexis;
private boolean compute;
private Part[][] map;
public Draw_Board()
{
int x = 52;
int y =49;
map=new Part[9][12];
for(int i=0;i<9;i )
{
for(int j=0;j<12;j )
{
matloc=new Point();
if(i==j amp;amp; i==0)
{
partpic = new ImageIcon(getClass().getResource( "images/bird.png" ));
playertyp=1;//the bird equal to player 1
}
else{
partpic = new ImageIcon(getClass().getResource( "images/stone.png" ));
playertyp=2;
}
partstick = new JLabel("",partpic,JLabel.CENTER);
partstick.addMouseListener(this);
matloc.setX(x);
matloc.setY(y);
x =61;
if(j==11)
{
x=52;
y =57;
}
partstick.setLocation(matloc.getX(),matloc.getY());
partstick.setSize(60,60);
map[i][j]=new Part(matloc, partpic, partstick,
playerexis, playertyp, partexis, compute);
// if(i==0 amp;amp; j==0)System.out.println(partstick.getX() " " partstick.getY());
}
}
}
public void draw(Panelmenu p)
{
for (int i = 0; i < 9; i )
{
for (int j = 0; j < 12; j )
{
map[i][j].draw(p);
}
}
}
public Point getMatloc() {
return matloc;
}
public void setMatloc(Point matloc) {
this.matloc = matloc;
}
public ImageIcon getPartpic() {
return partpic;
}
public void setPartpic(ImageIcon partpic) {
this.partpic = partpic;
}
public JLabel getPartstick() {
return partstick;
}
public void setPartstick(JLabel partstick) {
this.partstick = partstick;
}
public boolean isPlayerexis() {
return playerexis;
}
public void setPlayerexis(boolean playerexis) {
this.playerexis = playerexis;
}
public int getPlayertyp() {
return playertyp;
}
public void setPlayertyp(int playertyp) {
this.playertyp = playertyp;
}
public boolean isPartexis() {
return partexis;
}
public void setPartexis(boolean partexis) {
this.partexis = partexis;
}
public boolean isCompute() {
return compute;
}
public void setCompute(boolean compute) {
this.compute = compute;
}
public Part[][] getMap() {
return map;
}
public void setMap(Part[][] map) {
this.map = map;
}
@Override
public void actionPerformed(ActionEvent e)
{
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}
Ответ №1:
Используйте JButton вместо JLabel, тогда вы можете просто добавить ActionListener к кнопке. Вы можете придать кнопке вид метки, используя:
button.setBorderPainted( false );
Когда вы устанавливаете значок, вы можете использовать метод setActionCommand (…) для управления обработкой при нажатии кнопки.
Прочитайте раздел из руководства по Swing о том, как использовать кнопки, для объяснения и примера.
я хочу создать событие только тогда, когда значение playertyp равно 1
Затем, когда вы измените значок, вы можете удалить ActionListener с кнопки, чтобы событие не генерировалось.
Комментарии:
1. я добавляю addMouseListener(this); для всех jlabels в массиве, но я хочу создать событие только тогда, когда playertyp равен 1
Ответ №2:
Переместите ваше объявление JLabel
перед if (i == j amp;amp; i == 0)
инструкцией и добавляйте прослушиватель мыши только тогда, когда вы установите playertyp
значение один:
matloc=new Point();
partstick = new JLabel("",partpic,JLabel.CENTER);
if(i==j amp;amp; i==0) {
partpic = new ImageIcon(getClass().getResource( "images/bird.png" ));
playertyp=1;//the bird equal to player 1
partstick.addMouseListener(this); // Add mouse listener only when partype = 1
} else {
partpic = new ImageIcon(getClass().getResource( "images/stone.png" ));
playertyp=2;
}
Комментарии:
1. но я хочу, чтобы изображение в j ==0 и i == 0 было удалено
Ответ №3:
Вы могли бы создать подкласс a, JLabel
который реализует a MouseListener
. Подкласс также сохранит родительский объект, который его создал, так что при вызове mouseClicked
метода MouseListener он вызовет соответствующий метод в родительском объекте.
public class MyJLabel extends JLabel implements MouseListener {
public MyJLabel(String title) {
super(title);
addMouseListener(this);
}
public void mouseClicked(MouseEvent e) {
//YOUR RESPONSE HERE
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
}