建立一个窗口界面,用JLable和相关组件(比如适当增加按钮,文本域等,可以自由发挥)实现以下界面,要求: (1)点击任何一张牌,能控制其向上方移动,表示选中状态。再次点击该张扑克牌,又能回复到初始状态。
时间: 2024-05-04 08:22:36 浏览: 45
设计图形界面标签和按钮组件PPT学习教案.pptx
好的,以下是一个简单的实现示例:
```java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CardGame extends JFrame implements ActionListener {
private JLabel[] cards;
private boolean[] selected;
public CardGame() {
super("Card Game");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 400);
JPanel panel = new JPanel(new GridLayout(4, 5, 5, 5));
cards = new JLabel[20];
selected = new boolean[20];
for (int i = 0; i < 20; i++) {
cards[i] = new JLabel(new ImageIcon("card" + (i + 1) + ".png"));
cards[i].setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
cards[i].addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
JLabel card = (JLabel) e.getSource();
int index = indexOf(card);
if (selected[index]) {
card.setLocation(card.getX(), card.getY() + 20);
selected[index] = false;
} else {
card.setLocation(card.getX(), card.getY() - 20);
selected[index] = true;
}
}
});
panel.add(cards[i]);
}
getContentPane().add(panel, BorderLayout.CENTER);
setLocationRelativeTo(null);
setVisible(true);
}
private int indexOf(JLabel card) {
for (int i = 0; i < 20; i++) {
if (cards[i] == card) {
return i;
}
}
return -1;
}
public static void main(String[] args) {
new CardGame();
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
```
运行程序后,您将看到一个包含20张扑克牌的窗口界面。单击任何一张牌,它将向上移动20个像素,表示选中状态;再次单击该牌,它将回到初始状态。
您可以按照自己的需要修改代码,添加更多组件和功能。
阅读全文