实验目的:
- 学习在GUI界面框架的建立
- 学习在GUI界面画图和显示文字
实验内容:
- 随机显示扑克牌
- 编写程序,创建一个JFrame,布局为FlowLayout,在框架中显示从一副54张扑克牌中随机选取三张牌,牌的图像文件在card文件夹下,文件名为1.png, 2.png, 3.png等,框架的标题为“扑克牌”,图标为扑克牌的大王图片
- 三张牌都是不同的并且是随机选取的,提示方法:创建一个ArayyList,包含1-54的整数,并调用Collections.shuffle函数打乱列表,然后选取前面3个数+.png作为文件名。
- 创建以这3个文件名构建的ImageIcon数组,并用该数组元素构建JLabel对象,添加到JFrame并显示,显示结果参照下图
- 布局实验
- 整个框架如下面两个图所示,框架用默认布局,东西南北中显示如下图。
- 在布局的中心位置添加了一个选项卡窗格,该选项卡中包含2个JPanel,一个Panel采用网格布局,另一个采用绝对布局。定义选项卡以及添加panel布局示例代码如下:
JTabbedPane p = new JTabbedPane();
p.add("网格布局的面板",gridPanel);
- 网格布局由12*12个的JLabel对象组成,并按图设置黑白背景,注意在设置背景前要设置其为非透明。空布局面板采用绝对定位添加一个JtextField和JButton控件
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.Collections;
public class CardTest {
public static void main(String [] args){
JFrame frame=new JFrame();
frame.setSize(300,200);
Image image1=new ImageIcon("card/54.png").getImage();
frame.setIconImage(image1);
frame.setTitle("扑克牌");
frame.setLayout(new FlowLayout(FlowLayout.LEFT,20,5));
ImageIcon[] image = new ImageIcon[3];
ArrayList<Integer> list = new ArrayList<>();
for (int i = 1; i <= 54; i++) {
list.add(i);
}
Collections.shuffle(list);
for (int i = 0; i < 3; i++) {
image[i] = new ImageIcon("card/" + list.get(i) + ".png");
frame.add(new JLabel(image[i]));
}
frame.setVisible(true);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
import javax.swing.*;
import java.awt.*;
public class GridLayoutFrame extends JFrame {
public static void main(String []args) {
JFrame frame = new JFrame();
JPanel gridPanel = new JPanel();
gridPanel.setLayout(new GridLayout(12,12));
JLabel lable[][]=new JLabel[12][12];
for(int i=0;i<12;i++){
for(int j=0;j<12;j++){
lable[i][j]=new JLabel();
lable[i][j].setOpaque(true);
if((i+j)%2==0)
lable[i][j].setBackground(Color.black);
else
lable[i][j].setBackground(Color.white);
gridPanel.add(lable[i][j]);
}
}
JPanel nullPanel=new JPanel();
nullPanel.setLayout(null);
JButton button = new JButton("确定");
JTextField text = new JTextField();
nullPanel.add(text);
nullPanel.add(button);
text.setBounds(100,30,90,30);
button.setBounds(190,30,66,30);
JTabbedPane p=new JTabbedPane();
p.add("网格布局的面板",gridPanel);
p.add("空布局的面板",nullPanel);
frame.add(p,BorderLayout.CENTER);
frame.add(new JButton("窗体是BorderLayout布局"),BorderLayout.NORTH);
frame.add(new JButton("东"),BorderLayout.EAST);
frame.add(new JButton("西"),BorderLayout.WEST);
frame.add(new JButton("南"),BorderLayout.SOUTH);
frame.setBounds(10,10,570,390);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}