标签
label
new JLabel("xxx")
图标Icon
package com.dongfang.lesson04;
import javax.swing.*;
import java.awt.*;
//图标需要实现类
public class IconDemo extends JFrame implements Icon {
private int width;
private int height;
public IconDemo(){}//无参构造
public IconDemo(int width,int height){
this.width = width;
this.height = height;
}
public void init(){
IconDemo iconDemo = new IconDemo(15, 15);
//图标放在标签上,也可以放在按钮上
JLabel label = new JLabel("icontest",iconDemo,SwingConstants.CENTER);
Container container = getContentPane();
container.add(label);
this.setVisible(true);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new IconDemo().init();
}
@Override
public void paintIcon(Component c,Graphics g,int x,int y){
g.fillOval(x,y,width,height);
}
@Override
public int getIconWidth(){
return this.width;
}
@Override
public int getIconHeight(){
return this.height;
}
}
图片Icon
package com.dongfang.lesson04;
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class ImageIconDemo extends JFrame {
public ImageIconDemo() throws HeadlessException {
//获取图片的地址
JLabel label = new JLabel("ImageIcon");
URL url = ImageIconDemo.class.getResource("tp.jpg");
ImageIcon imageIcon = new ImageIcon(url);//命名不要冲突了
label.setIcon(imageIcon);
label.setHorizontalAlignment(SwingConstants.CENTER);
Container container = getContentPane();
container.add(label);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setBounds(100,100,200,200);
}
public static void main(String[] args) {
new ImageIconDemo();
}
}
面板
JPanel
package com.dongfang.lesson05;
import javax.swing.*;
import java.awt.*;
public class JPanelDemo extends JFrame {
public JPanelDemo() {
Container container = this.getContentPane();
container.setLayout(new GridLayout(2,1,10,10));//行列 间距
JPanel panel1 = new JPanel(new GridLayout(1,3));
JPanel panel2 = new JPanel(new GridLayout(1,2));
JPanel panel3 = new JPanel(new GridLayout(2,1));
JPanel panel4 = new JPanel(new GridLayout(3,2));
panel1.add(new JButton("1"));
panel1.add(new JButton("1"));
panel1.add(new JButton("1"));
panel2.add(new JButton("2"));
panel2.add(new JButton("2"));
panel3.add(new JButton("3"));
panel3.add(new JButton("3"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
panel4.add(new JButton("4"));
container.add(panel1);
container.add(panel2);
container.add(panel3);
container.add(panel4);
this.setVisible(true);
this.setSize(500,500);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JPanelDemo();
}
}
![截图](C:\Users\34454\Pictures\Screenshots\屏幕截图 2024-09-24 185704.png)
JScrollPanel
package com.dongfang.lesson05;
import javax.swing.*;
import java.awt.*;
public class JScrollDemo extends JFrame {
public JScrollDemo(){
Container container = this.getContentPane();
//文本域
JTextArea textArea = new JTextArea(20, 50);
textArea.setText("文本域");
//Scroll面板 滚动条
JScrollPane scrollPane = new JScrollPane(textArea);
container.add(scrollPane);
this.setVisible(true);
this.setBounds(100,100,300,350);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JScrollDemo();
}
}
按钮
-
普通按钮(图片按钮)
package com.dongfang.lesson05; import javax.swing.*; import java.awt.*; import java.net.URL; public class JButtonDemo01 extends JFrame { public JButtonDemo01(){ Container container = this.getContentPane(); //将一个图片变为图标 URL resource = JButtonDemo01.class.getResource("tp.jpg"); Icon icon = new ImageIcon(resource); //把这个图标放在按钮上 JButton button = new JButton(); button.setIcon(icon); button.setToolTipText("图片按钮"); //add container.add(button); this.setVisible(true); this.setBounds(100,100,500,300); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new JButtonDemo01(); } }
-
单选按钮
package com.dongfang.lesson05; import javax.swing.*; import java.awt.*; import java.net.URL; public class JButtonDemo02 extends JFrame { public JButtonDemo02(){ Container container = this.getContentPane(); //将一个图片变为图标 URL resource = JButtonDemo02.class.getResource("tp.jpg"); Icon icon = new ImageIcon(resource); //单选框 RadioButton JRadioButton radioButton1 = new JRadioButton("JRadioButton1"); JRadioButton radioButton2 = new JRadioButton("JRadioButton2"); JRadioButton radioButton3 = new JRadioButton("JRadioButton3"); //由于单选框只能选择一个 分组 同一组只能选一个 ButtonGroup group = new ButtonGroup(); group.add(radioButton1); group.add(radioButton2); group.add(radioButton3); container.add(radioButton1,BorderLayout.CENTER); container.add(radioButton2,BorderLayout.NORTH); container.add(radioButton3,BorderLayout.SOUTH); this.setVisible(true); this.setBounds(100,100,500,300); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new JButtonDemo02(); } }
-
复选按钮
package com.dongfang.lesson05; import javax.swing.*; import java.awt.*; import java.net.URL; public class JButtonDemo03 extends JFrame { public JButtonDemo03(){ Container container = this.getContentPane(); //将一个图片变为图标 URL resource = JButtonDemo03.class.getResource("tp.jpg"); Icon icon = new ImageIcon(resource); //多选框 CheckBox JCheckBox checkBox01 = new JCheckBox("checkBox01"); JCheckBox checkBox02 = new JCheckBox("checkBox02"); container.add(checkBox01,BorderLayout.NORTH); container.add(checkBox02,BorderLayout.SOUTH); this.setVisible(true); this.setBounds(100,100,500,300); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new JButtonDemo03(); } }
列表
-
下拉框
package com.dongfang.lesson06; import javax.swing.*; import java.awt.*; public class TestComboboxDemo01 extends JFrame { public TestComboboxDemo01(){ Container container = this.getContentPane(); JComboBox status = new JComboBox(); status.addItem(null); status.addItem("正在热映"); status.addItem("已下架"); status.addItem("即将上映"); container.add(status); this.setVisible(true); this.setSize(500,350); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new TestComboboxDemo01(); } }
-
列表框
package com.dongfang.lesson06; import javax.swing.*; import java.awt.*; import java.util.Vector; public class TestComboboxDemo02 extends JFrame { public TestComboboxDemo02(){ Container container = this.getContentPane(); //生成列表的内容 稀疏数组 //String[] contents = {"1","2","3"}; Vector contents = new Vector(); //列表中需要放内容 JList list = new JList(contents); contents.add("1"); contents.add("2"); contents.add("3"); container.add(list); this.setVisible(true); this.setSize(500,350); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new TestComboboxDemo02(); } }
-
应用场景
- 选择地区,或者一些单个选项
- 列表,展示信息,一般是动态扩容
文本框
-
文本框
package com.dongfang.lesson06; import javax.swing.*; import java.awt.*; public class TestTextDemo01 extends JFrame { public TestTextDemo01() { Container container = this.getContentPane(); JTextField textField1 = new JTextField("hello"); JTextField textField2 = new JTextField("world",20); container.add(textField1,BorderLayout.NORTH); container.add(textField2,BorderLayout.SOUTH); this.setVisible(true); this.setSize(500,350); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new TestTextDemo01(); } }
-
密码框
package com.dongfang.lesson06; import javax.swing.*; import java.awt.*; public class TestTextDemo02 extends JFrame { public TestTextDemo02() { Container container = this.getContentPane(); //面板 JPasswordField passwordField = new JPasswordField();//****** passwordField.setEchoChar('*'); container.add(passwordField); this.setVisible(true); this.setSize(500,350); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new TestTextDemo02(); } }
-
文本域
贪吃蛇
帧 如果时间片足够小,就是动画,一秒30帧 60帧 连起来是动画,拆开就是静态的图片
键盘监听
定时器Timer
- 定义数据
- 画上去
- 监听事件
package com.dongfang.snake;
import javax.swing.*;
public class StartGame {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setBounds();
frame.setResizable(false);//窗口大小不可变
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//正常的游戏界面都应该在面板上
frame.add(new GamePanel());
frame.setVisible(true);
}
}
package com.dongfang.snake;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
//游戏的面板
public class GamePanel extends JPanel implements KeyListener, ActionListener {
//定义蛇的数据结构
int length;//蛇的长度
int[] snakeX = new int[900];//蛇的X坐标
int[] snakeY = new int[900];//蛇的Y坐标
String fx;
//食物的坐标
int foodX;
int foodY;
Random random = new Random();
int score;//成绩
//游戏当前的状态 开始 停止
boolean isStart = false;//默认是不开始
boolean isFail = false;//游戏状态失败
//定时器 以毫秒为单位
Timer timer = new Timer(100,this);//100毫秒执行一次
//构造器
public GamePanel() {
init();
//获得焦点和键盘事件
this.setFocusable(true);//获得焦点事件
this.addKeyListener(this);//获得键盘监听事件
timer.start();//游戏一开始,定时器就启动
}
//初始化方法
public void init(){
length = 3;
snakeX[0] = 100;snakeY[0] = 100;//脑袋的坐标
snakeX[1] = 75;snakeY[1] = 100;//第一个身体的坐标
snakeX[2] = 50;snakeY[2] = 100;//第二个身体的坐标
fx = "right";//初始方向向右
//把食物随机分布在界面上
foodX = 25 + 25*random.nextInt(48);
foodY = 75 + 25*random.nextInt(36);
score = 0;
}
//绘制面板,游戏中的所有东西,都是用这个画笔来画
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);//清屏
//绘制静态的面板
this.setBackground(Color.BLACK);
Data.header.paintIcon(this,g,25,25);//头部广告栏画上去
g.fillRect(25,75,1200,900);//默认的游戏界面
//把小蛇画上去
if (fx.equals("right")){
Data.right.paintIcon(this,g,snakeX[0],snakeY[0]);//蛇头初始化向右,通过方向来判断
}else if (fx.equals("left")){
Data.left.paintIcon(this,g,snakeX[0],snakeY[0]);
}else if (fx.equals("up")){
Data.up.paintIcon(this,g,snakeX[0],snakeY[0]);
}else if (fx.equals("down")){
Data.down.paintIcon(this,g,snakeX[0],snakeY[0]);
}
for (int i = 0;i < length;i++){
Data.body.paintIcon(this,g,snakeX[i],snakeY[i]);
}
//画积分
g.setColor(Color.BLACK);
g.setFont(new Font("微软雅黑",Font.BOLD,20));//设置字体
g.drawString("长度"+length,1100,25);
g.drawString("分数"+score,1100,50);
//画食物
Data.food.paintIcon(this,g,foodX,foodY);
//游戏状态
if (isStart==false){
g.setColor(Color.BLACK);
g.setFont(new Font("微软雅黑",Font.BOLD,50));//设置字体
g.drawString("按下空格开始游戏",300,300);
}
if (isFail == true){
g.setColor(Color.BLACK);
g.setFont(new Font("微软雅黑",Font.BOLD,50));//设置字体
g.drawString("失败,按下空格重新开始",300,300);
}
}
//键盘监听事件
@Override
public void keyPressed(KeyEvent e){
int keyCode = e.getKeyCode();//获得键盘按键是哪一个
if (keyCode == KeyEvent.VK_SPACE){//如果按下的是空格
if (isFail){
//重新开始
isFail = false;
init();
}else {
isStart = !isStart;//取反
}
repaint();
}
//小蛇移动
if (keyCode == KeyEvent.VK_W){
fx = "up";
}else if (keyCode == KeyEvent.VK_S){
fx = "down";
}else if (keyCode == KeyEvent.VK_A){
fx = "left";
}else if (keyCode == KeyEvent.VK_D){
fx = "right";
}
}
//事件监听 需要通过固定的时间来刷新 1秒10次
@Override
public void actionPerformed(ActionEvent e){
if (isStart && isFail == false){//如果游戏是开始状态,就让小蛇动起来
//吃食物
if (snakeX[0] == foodX && snakeY[0] == foodY){
length++;//长度加一
length++;
//分数加十
score = score + 10;
//再次随机食物
foodX = 25 + 25*random.nextInt(48);
foodY = 75 + 25*random.nextInt(36);
}
//移动
for (int i = length-1;i > 0;i--){
snakeX[i] = snakeX[i-1];
snakeY[i] = snakeY[i-1];//向前移动一节
}
//走向
if (fx.equals("right")){
snakeX[0] = snakeX[0]+25;
if (snakeX[0]>1200){
snakeX[0] = 25;
}//边界判断
}else if(fx.equals("left")){
snakeX[0] = snakeX[0]-25;
if (snakeX[0]<25){
snakeX[0] = 1200;
}//边界判断
}else if(fx.equals("up")){
snakeY[0] = snakeY[0]-25;
if (snakeY[0]<75){
snakeY[0] = 900;
}//边界判断
}else if(fx.equals("down")){
snakeY[0] = snakeY[0]+25;
if (snakeY[0]>900){
snakeY[0] = 75;
}//边界判断
}
//失败判断,撞到自己就算失败
for (int i = 0;i < length;i++){
if (snakeX[0] == snakeX[i] && snakeY[0] == snakeY[i]){
isFail = true;
}
}
repaint();//重画小蛇
}
timer.start();//定时器开启
}
}
package com.dongfang.snake;
import javax.swing.*;
import java.net.URL;
//数据中心
public class Data {
//相对路径 tx.png
//绝对路径 相当于当前的项目
private static URL headerURL = Data.class.getResource("statics/header.png");
private static URL bodyURL = Data.class.getResource("statics/body.png");
private static URL foodURL = Data.class.getResource("statics/food.png");
private static URL upURL = Data.class.getResource("statics/up.png");
private static URL downURL = Data.class.getResource("statics/down.png");
private static URL leftURL = Data.class.getResource("statics/left.png");
private static URL rightURL = Data.class.getResource("statics/right.png");
public static ImageIcon header = new ImageIcon(headerURL);
public static ImageIcon body = new ImageIcon(bodyURL);
public static ImageIcon food = new ImageIcon(foodURL);
public static ImageIcon up = new ImageIcon(upURL);
public static ImageIcon down = new ImageIcon(downURL);
public static ImageIcon left = new ImageIcon(leftURL);
public static ImageIcon right = new ImageIcon(rightURL);
}
标签:container,Day03,GUI,编程,add,static,import,new,public
From: https://www.cnblogs.com/dongfangyulv/p/18432079