-
2021-03-12 10:38:10
展开全部
package org.liky.game.frame;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class FiveChessFrame extends JFrame implements MouseListener, Runnable {
// 取得屏幕的宽度
int width = Toolkit.getDefaultToolkit().getScreenSize().width;
// 取得屏幕的高度
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
// 背景图片
BufferedImage bgImage = null;
// 保存棋子的坐标62616964757a686964616fe58685e5aeb931333264643162
int x = 0;
int y = 0;
// 保存之前下过的全部棋子的坐标
// 其中数据内容 0: 表示这个点并没有棋子, 1: 表示这个点是黑子, 2:表示这个点是白子
int[][] allChess = new int[19][19];
// 标识当前应该黑棋还是白棋下下一步
boolean isBlack = true;
// 标识当前游戏是否可以继续
boolean canPlay = true;
// 保存显示的提示信息
String message = "黑方先行";
// 保存最多拥有多少时间(秒)
int maxTime = 0;
// 做倒计时的线程类
Thread t = new Thread(this);
// 保存黑方与白方的剩余时间
int blackTime = 0;
int whiteTime = 0;
// 保存双方剩余时间的显示信息
String blackMessage = "无限制";
String whiteMessage = "无限制";
public FiveChessFrame() {
// 设置标题
this.setTitle("五子棋");
// 设置窗体大小
this.setSize(500, 500);
// 设置窗体出现位置
this.setLocation((width - 500) / 2, (height - 500) / 2);
// 将窗体设置为大小不可改变
this.setResizable(false);
// 将窗体的关闭方式设置为默认关闭后程序结束
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 为窗体加入监听器
this.addMouseListener(this);
// 将窗体显示出来
this.setVisible(true);
t.start();
t.suspend();
// 刷新屏幕,防止开始游戏时出现无法显示的情况.
this.repaint();
String imagePath = "" ;
try {
imagePath = System.getProperty("user.dir")+"/bin/image/background.jpg" ;
bgImage = ImageIO.read(new File(imagePath.replaceAll("\\\\", "/")));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void paint(Graphics g) {
// 双缓冲技术防止屏幕闪烁
BufferedImage bi = new BufferedImage(500, 500,
BufferedImage.TYPE_INT_RGB);
Graphics g2 = bi.createGraphics();
g2.setColor(Color.BLACK);
// 绘制背景
g2.drawImage(bgImage, 1, 20, this);
// 输出标题信息
g2.setFont(new Font("黑体", Font.BOLD, 20));
g2.drawString("游戏信息:" + message, 130, 60);
// 输出时间信息
g2.setFont(new Font("宋体", 0, 14));
g2.drawString("黑方时间:" + blackMessage, 30, 470);
g2.drawString("白方时间:" + whiteMessage, 260, 470);
// 绘制棋盘
for (int i = 0; i < 19; i++) {
g2.drawLine(10, 70 + 20 * i, 370, 70 + 20 * i);
g2.drawLine(10 + 20 * i, 70, 10 + 20 * i, 430);
}
// 标注点位
g2.fillOval(68, 128, 4, 4);
g2.fillOval(308, 128, 4, 4);
g2.fillOval(308, 368, 4, 4);
g2.fillOval(68, 368, 4, 4);
g2.fillOval(308, 248, 4, 4);
g2.fillOval(188, 128, 4, 4);
g2.fillOval(68, 248, 4, 4);
g2.fillOval(188, 368, 4, 4);
g2.fillOval(188, 248, 4, 4);
/*
* //绘制棋子 x = (x - 10) / 20 * 20 + 10 ; y = (y - 70) / 20 * 20 + 70 ;
* //黑子 g.fillOval(x - 7, y - 7, 14, 14); //白子 g.setColor(Color.WHITE) ;
* g.fillOval(x - 7, y - 7, 14, 14); g.setColor(Color.BLACK) ;
* g.drawOval(x - 7, y - 7, 14, 14);
*/
// 绘制全部棋子
for (int i = 0; i < 19; i++) {
for (int j = 0; j < 19; j++) {
if (allChess[i][j] == 1) {
// 黑子
int tempX = i * 20 + 10;
int tempY = j * 20 + 70;
g2.fillOval(tempX - 7, tempY - 7, 14, 14);
}
if (allChess[i][j] == 2) {
// 白子
int tempX = i * 20 + 10;
int tempY = j * 20 + 70;
g2.setColor(Color.WHITE);
g2.fillOval(tempX - 7, tempY - 7, 14, 14);
g2.setColor(Color.BLACK);
g2.drawOval(tempX - 7, tempY - 7, 14, 14);
}
}
}
g.drawImage(bi, 0, 0, this);
}
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
/*
* System.out.println("X:"+e.getX()); System.out.println("Y:"+e.getY());
*/
if (canPlay == true) {
x = e.getX();
y = e.getY();
if (x >= 10 && x <= 370 && y >= 70 && y <= 430) {
x = (x - 10) / 20;
y = (y - 70) / 20;
if (allChess[x][y] == 0) {
// 判断当前要下的是什么颜色的棋子
if (isBlack == true) {
allChess[x][y] = 1;
isBlack = false;
message = "轮到白方";
} else {
allChess[x][y] = 2;
isBlack = true;
message = "轮到黑方";
}
// 判断这个棋子是否和其他的棋子连成5连,即判断游戏是否结束
boolean winFlag = this.checkWin();
if (winFlag == true) {
JOptionPane.showMessageDialog(this, "游戏结束,"
+ (allChess[x][y] == 1 ? "黑方" : "白方") + "获胜!");
canPlay = false;
}
} else {
JOptionPane.showMessageDialog(this, "当前位置已经有棋子,请重新落子!");
}
this.repaint();
}
}
/* System.out.println(e.getX() + " -- " + e.getY()); */
// 点击 开始游戏 按钮
if (e.getX() >= 400 && e.getX() <= 470 && e.getY() >= 70
&& e.getY() <= 100) {
int result = JOptionPane.showConfirmDialog(this, "是否重新开始游戏?");
if (result == 0) {
// 现在重新开始游戏
// 重新开始所要做的操作: 1)把棋盘清空,allChess这个数组中全部数据归0.
// 2) 将 游戏信息: 的显示改回到开始位置
// 3) 将下一步下棋的改为黑方
for (int i = 0; i < 19; i++) {
for (int j = 0; j < 19; j++) {
allChess[i][j] = 0;
}
}
// 另一种方式 allChess = new int[19][19];
message = "黑方先行";
isBlack = true;
blackTime = maxTime;
whiteTime = maxTime;
if (maxTime > 0) {
blackMessage = maxTime / 3600 + ":"
+ (maxTime / 60 - maxTime / 3600 * 60) + ":"
+ (maxTime - maxTime / 60 * 60);
whiteMessage = maxTime / 3600 + ":"
+ (maxTime / 60 - maxTime / 3600 * 60) + ":"
+ (maxTime - maxTime / 60 * 60);
t.resume();
} else {
blackMessage = "无限制";
whiteMessage = "无限制";
}
this.canPlay = true;
this.repaint();
}
}
// 点击 游戏设置 按钮
if (e.getX() >= 400 && e.getX() <= 470 && e.getY() >= 120
&& e.getY() <= 150) {
String input = JOptionPane
.showInputDialog("请输入游戏的最大时间(单位:分钟),如果输入0,表示没有时间限制:");
try {
maxTime = Integer.parseInt(input) * 60;
if (maxTime < 0) {
JOptionPane.showMessageDialog(this, "请输入正确信息,不允许输入负数!");
}
if (maxTime == 0) {
int result = JOptionPane.showConfirmDialog(this,
"设置完成,是否重新开始游戏?");
if (result == 0) {
for (int i = 0; i < 19; i++) {
for (int j = 0; j < 19; j++) {
allChess[i][j] = 0;
}
}
// 另一种方式 allChess = new int[19][19];
message = "黑方先行";
isBlack = true;
blackTime = maxTime;
whiteTime = maxTime;
blackMessage = "无限制";
whiteMessage = "无限制";
this.canPlay = true;
this.repaint();
}
}
if (maxTime > 0) {
int result = JOptionPane.showConfirmDialog(this,
"设置完成,是否重新开始游戏?");
if (result == 0) {
for (int i = 0; i < 19; i++) {
for (int j = 0; j < 19; j++) {
allChess[i][j] = 0;
}
}
// 另一种方式 allChess = new int[19][19];
message = "黑方先行";
isBlack = true;
blackTime = maxTime;
whiteTime = maxTime;
blackMessage = maxTime / 3600 + ":"
+ (maxTime / 60 - maxTime / 3600 * 60) + ":"
+ (maxTime - maxTime / 60 * 60);
whiteMessage = maxTime / 3600 + ":"
+ (maxTime / 60 - maxTime / 3600 * 60) + ":"
+ (maxTime - maxTime / 60 * 60);
t.resume();
this.canPlay = true;
this.repaint();
}
}
} catch (NumberFormatException e1) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(this, "请正确输入信息!");
}
}
// 点击 游戏说明 按钮
if (e.getX() >= 400 && e.getX() <= 470 && e.getY() >= 170
&& e.getY() <= 200) {
JOptionPane.showMessageDialog(this,
"这个一个五子棋游戏程序,黑白双方轮流下棋,当某一方连到五子时,游戏结束。");
}
// 点击 认输 按钮
if (e.getX() >= 400 && e.getX() <= 470 && e.getY() >= 270
&& e.getY() <= 300) {
int result = JOptionPane.showConfirmDialog(this, "是否确认认输?");
if (result == 0) {
if (isBlack) {
JOptionPane.showMessageDialog(this, "黑方已经认输,游戏结束!");
} else {
JOptionPane.showMessageDialog(this, "白方已经认输,游戏结束!");
}
canPlay = false;
}
}
// 点击 关于 按钮
if (e.getX() >= 400 && e.getX() <= 470 && e.getY() >= 320
&& e.getY() <= 350) {
JOptionPane.showMessageDialog(this,
"本游戏由MLDN制作,有相关问题可以访问");
}
// 点击 退出 按钮
if (e.getX() >= 400 && e.getX() <= 470 && e.getY() >= 370
&& e.getY() <= 400) {
JOptionPane.showMessageDialog(this, "游戏结束");
System.exit(0);
}
}
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
private boolean checkWin() {
boolean flag = false;
// 保存共有相同颜色多少棋子相连
int count = 1;
// 判断横向是否有5个棋子相连,特点 纵坐标 是相同, 即allChess[x][y]中y值是相同
int color = allChess[x][y];
/*
* if (color == allChess[x+1][y]) { count++; if (color ==
* allChess[x+2][y]) { count++; if (color == allChess[x+3][y]) {
* count++; } } }
*/
// 通过循环来做棋子相连的判断
/*
* int i = 1; while (color == allChess[x + i][y + 0])
* i = 1; while (color == allChess[x - i][y - 0]) if
* (count >= 5) // 纵向的判断 int i2 = 1 ; int count2 = 1 ;
* while (color == allChess[x + 0][y + i2]) i2 = 1;
* while (color == allChess[x - 0][y - i2]) if
* (count2 >= 5) // 斜方向的判断(右上 + 左下) int i3 = 1 ; int
* count3 = 1 ; while (color == allChess[x + i3][y - i3]) { count3++;
* i3++; } i3 = 1; while (color == allChess[x - i3][y + i3]) { count3++;
* i3++; } if (count3 >= 5) // 斜方向的判断(右下 + 左上) int i4 =
* 1 ; int count4 = 1 ; while (color == allChess[x + i4][y + i4]) {
* count4++; i4++; } i4 = 1; while (color == allChess[x - i4][y - i4]) {
* count4++; i4++; } if (count4 >= 5)
*/
// 判断横向
count = this.checkCount(1, 0, color);
if (count >= 5) {
flag = true;
} else {
// 判断纵向
count = this.checkCount(0, 1, color);
if (count >= 5) {
flag = true;
} else {
// 判断右上、左下
count = this.checkCount(1, -1, color);
if (count >= 5) {
flag = true;
} else {
// 判断右下、左上
count = this.checkCount(1, 1, color);
if (count >= 5) {
flag = true;
}
}
}
}
return flag;
}
// 判断棋子连接的数量
private int checkCount(int xChange, int yChange, int color) {
int count = 1;
int tempX = xChange;
int tempY = yChange;
while (x + xChange >= 0 && x + xChange <= 18 && y + yChange >= 0
&& y + yChange <= 18
&& color == allChess[x + xChange][y + yChange]) {
count++;
if (xChange != 0)
xChange++;
if (yChange != 0) {
if (yChange > 0)
yChange++;
else {
yChange--;
}
}
}
xChange = tempX;
yChange = tempY;
while (x - xChange >= 0 && x - xChange <= 18 && y - yChange >= 0
&& y - yChange <= 18
&& color == allChess[x - xChange][y - yChange]) {
count++;
if (xChange != 0)
xChange++;
if (yChange != 0) {
if (yChange > 0)
yChange++;
else {
yChange--;
}
}
}
return count;
}
public void run() {
// TODO Auto-generated method stub
// 判断是否有时间限制
if (maxTime > 0) {
while (true) {
if (isBlack) {
blackTime--;
if (blackTime == 0) {
JOptionPane.showMessageDialog(this, "黑方超时,游戏结束!");
}
} else {
whiteTime--;
if (whiteTime == 0) {
JOptionPane.showMessageDialog(this, "白方超时,游戏结束!");
}
}
blackMessage = blackTime / 3600 + ":"
+ (blackTime / 60 - blackTime / 3600 * 60) + ":"
+ (blackTime - blackTime / 60 * 60);
whiteMessage = whiteTime / 3600 + ":"
+ (whiteTime / 60 - whiteTime / 3600 * 60) + ":"
+ (whiteTime - whiteTime / 60 * 60);
this.repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(blackTime + " -- " + whiteTime);
}
}
}
}
已赞过
已踩过<
你对这个回答的评价是?
评论
收起
更多相关内容 -
JAVA GUI自定义JPanel画板背景
2021-03-15 18:11:40自定义JPanel面板背景一、前言1.GUI全称是Graphical User Interface,就是图形用户界面。JAVA的GUI应用广泛在我们生活中也很常见。很多应用使用该GUI编程设计,像点击QQ图标弹出对应的登录窗体。一般程序与用户的...自定义JPanel面板背景
一、前言
1.GUI全称是Graphical User Interface,就是图形用户界面。JAVA的GUI应用广泛在我们生活中也很常见。很多应用使用该GUI编程设计,像点击QQ图标弹出对应的登录窗体。
一般程序与用户的交互都基于对应程序的运行界面。
2.JPanel面板是SWING下的一个面板容器类。该面板支持嵌套,可设置布局方式,设置不同的布局管理器可添加其他控件像JButton按钮,JTextField文本框等。来设计完善一个程序界面窗体。
作为绘制面板支持setBackground()设置背景颜色的方法还远远不够。这里实现自定义为JPanel设置图片背景。
二、平台工具
1.MyEclipse
此处演示使用myeclipse2014
其他支持java awt+swing平台也可
三、图文展示
1.同一窗体下做不同处理JPanel的效果
(1)首先创建一个不加修饰的窗体,一般的普通默认jpanel界面效果如下:
(2)简单的设置背景颜色效果:
(3)自定义处理后的JPanel下的窗体效果:
2.代码实现:
自定义JPanel背景处理,该图片为bg.PNG,与测试类在同一路径下,使用图片注意使用相对路径
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GUITest {
private static JFrame jframe; //声明一个窗体
private JPanel jpanel; //声明一个画板
public GUITest(){ //构造方法
jframe = new JFrame();
init();
}
private void init(){
jframe.setTitle("测试");
jpanel = new JPanel(){//关键代码,就是重写了paint的一个方法
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
ImageIcon img = new ImageIcon(GUITest.class.getResource("bg.png"));
/**
* bg.PNG这个地方换成自己的图片
* 此处使用的相对路径,bg.png跟该测试类在同一路径下
* 不过建议使用相对路径避免使用绝对路径
*/
img.paintIcon(this, g, 0, 0);
}
};
jpanel.setOpaque(true);
jframe.setBounds(200, 200, 500, 400); //设置显示位置距离左边200像素距离上边200像素及屏幕大小500*400
jframe.add(jpanel); //添加画板到窗体
jframe.setVisible(true); //设置显示界面
}
public static void main(String[] args) {
new GUITest(); // 实例化对象
}
}
四、拓展布局管理器
下面简单写个登录窗体:
基于自定义的JPanel背景,设置GridBagLayout布局,添加按钮文本框等基本控件实现的一个简单登录窗体。
(1)代码如下:
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class GUIT {
//声明窗体,面板及控件
private static JFrame jframe;
private JLabel jlabel,jlabel1;
private GridBagLayout gridbag;
private GridBagConstraints constraints;
private JTextField jtfield1;
private JPasswordField jpfield1;
private JButton jbutton1,jbutton2,jbutton3;
private JPanel jpanel;
public GUIT(){
jframe = new JFrame();
jlabel = new JLabel();
jlabel1 = new JLabel();
jtfield1 = new JTextField();
jpfield1 = new JPasswordField();
gridbag = new GridBagLayout();
jbutton1 = new JButton();
jbutton2 = new JButton();
jbutton3 = new JButton();
init();
}
/**
* init()初始化并显示界面
*/
private void init(){
jframe.setTitle("登录");
/**
* 设置JPanel背景
*/
jpanel = new JPanel(){
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
ImageIcon img = new ImageIcon(GUITest.class.getResource("ddmbg.jpg"));
img.paintIcon(this, g, 0, 0);
}
};
//为JLabel,JButton初始化文本
jlabel.setText("用户名:");
jlabel1.setText("密 码:");
jbutton1.setText("登录");
jbutton2.setText("退出");
jbutton3.setText("注册");
//设置显示位置及屏幕大小500*400
jframe.setBounds(450, 240, 400, 240);
//jpanel采用GridBagLayout布局管理器
jpanel.setOpaque(false);
jpanel.setLayout(gridbag);
//初始化用户名label,并添加该控件到画板
constraints = getGridBagConstraints(0,0,1,1,0,0,GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(10,0,10,0),0,0);
gridbag.setConstraints(jlabel, constraints);
jpanel.add(jlabel);
//初始化用户名文本框,并添加该组件到画板
constraints = getGridBagConstraints(1,0,1,1,0,0,GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(10,0,10,0),100,0);
gridbag.setConstraints(jtfield1, constraints);
jpanel.add(jtfield1);
//初始化密码label
constraints = getGridBagConstraints(0,1,1,1,0,0,GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(10,0,10,0),0,0);
gridbag.setConstraints(jlabel1, constraints);
jpanel.add(jlabel1);
//初始化密码文本框
constraints = getGridBagConstraints(1,1,1,1,0,0,GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(10,0,10,0),100,0);
gridbag.setConstraints(jpfield1, constraints);
jpanel.add(jpfield1);
//初始化注册按钮,并添加该控件到画板
constraints = getGridBagConstraints(0,2,1,1,0,0,GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(10,0,10,0),0,0);
gridbag.setConstraints(jbutton3, constraints);
jpanel.add(jbutton3);
//初始化登录按钮
constraints = getGridBagConstraints(1,2,1,1,0,0,GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(10,0,10,0),0,0);
gridbag.setConstraints(jbutton1, constraints);
jpanel.add(jbutton1);
//初始化退出按钮
constraints = getGridBagConstraints(2,2,1,1,0,0,GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(10,0,10,0),0,0);
gridbag.setConstraints(jbutton2, constraints);
jpanel.add(jbutton2);
//添加画板到窗体
jframe.add(jpanel);
//窗体初始化完成
}
private static GridBagConstraints getGridBagConstraints(int gridx,int gridy,int gridwidth,int gridheight,double weightx,double weighty,int anchor,int fill,Insets insets,int ipadx,int ipady){
return new GridBagConstraints(gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, insets, ipadx, ipady);
}
public static void main(String[] args) {
new GUIT();
jframe.setVisible(true);
}
}
其中ddmbg为图片名
(2)实现效果如图所示:
GUI设计中布局是基础也是十分重要的知识。
熟练使用掌握三大布局及其他布局管理器需要自己敲代码练习了^_^
-
java编写的画板
2015-01-19 10:23:24这是一个用Java GUI编写的画板程序,自编代码,java课程设计 实现铅笔,橡皮,功能,可以画直线,矩形,圆等各种形状,可以保存读取所画图片,更改背景等。也有图片。可根据自己需求添加新功能,有一些功能也供大家... -
java写的画板
2017-12-05 19:34:25(3)设置边框布局,因为整个画板大致为左边部分,中间部分,菜单栏三个部分,用边框布局比较合适; (4)给窗体添加左面板,中间面板; (5)给左面板添加按钮,并设置按钮图片和效果; (6)给左面板添加左子面板... -
几何画板中如何添加背景图片
2021-04-15 19:12:01几何画板本身并没有像word之类的可以将图片设置成背景,他只能设置背景颜色。但是可以通过两种折中的方法来实现,不过有缺点,就是图片不能随窗口的变动而变动。下面小编就和大家一起来看看具体是如何在几何画板中...几何画板本身并没有像word之类的可以将图片设置成背景,他只能设置背景颜色。但是可以通过两种折中的方法来实现,不过有缺点,就是图片不能随窗口的变动而变动。下面小编就和大家一起来看看具体是如何在几何画板中操作的。
方法一 取消图片被选中属性
步骤一 打开几何画板,将要作为背景的图片选中并拖动到几何画板编辑区域里面,调整图片到软件窗口大小,如下图所示。
在几何画板中插入背景图片示例
步骤二 选中图片,鼠标右键,选择“属性”选项,在弹出的属性对话框下面有个“可以被选中”选项,将其前面的勾去掉,点击“确定”。
在属性对话框取消图片被选中示例
按照以上步骤操作以后,你会发现在接下来的操作中图片都是无法选中的,也是不会随意动的,这样就将此图片作为了背景图片。
方法二:利用固定点插入背景图片
步骤一 制作不能移动的点。打开几何画板软件,选择“点工具”在画板空白区域的中间绘制一个点,使用“选择工具”选中此点,鼠标右键选择“属性”,在弹出的属性对话框下面有个“可以被选中”选项,将其前面的勾去掉,点击“确定”。
在属性对话框取消点被选中示例
步骤二 把图片复制到点上。将要作为背景的图片复制到几何画板中,选中点和图片,按住Shift键,执行“编辑”——“合并图片到点”命令,此时图片就会以点为中心,均匀分布在该点的四周。
执行合并图片到点命令示例
步骤三 选中图片鼠标右键,选择“属性”选项,在弹出的属性对话框下面有个“可以被选中”选项,将其前面的勾去掉,点击“确定”。再执行隐藏点命令,那么这张背景图片也是永远不会动的。
在图片属性下取消勾选图片被选中示例
以上给大家总结了在几何画板中添加背景图片的两种方法,虽然图片不能随窗口的变动而变动,但对于美化课件来说,是一个可行的方案。如果你对于更改几何画板背景颜色不知道如何操作,可参考:在几何画板中如何更改背景颜色。
-
用Java实现简单的画画画板
2021-08-14 16:03:49用Java实现简单的画画画板 一:代码 先直接上代码吧,备注大部分都在代码中。 import java.awt.*; import javax.swing.*; import java.util.*; import java.awt.event.*; import javax.swing.event.*; import java....用Java实现简单的画画画板
一:代码
先直接上代码吧,备注大部分都在代码中。
import java.awt.*; import javax.swing.*; import java.util.*; import java.awt.event.*; import javax.swing.event.*; import java.io.*; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.awt.Graphics; public class DrawDraw extends JFrame implements ActionListener,MouseListener,MouseMotionListener{ public static void main(String[] args) { new DrawDraw(); } // 属性 JPanel p0,p1,p2; Color color; String shape; int x1,y1,x2,y2,newx1,newy1,newx2,newy2; Graphics2D g; BufferedImage img; boolean flag; DrawDraw(){ p0 = new JPanel(); p1 = new JPanel(); p2 = new JPanel(); setTitle("画画面板"); this.setSize(1400,900); this.setLocation(100,100); // 图形按钮,采用数组的方式添加按钮。好处在更改代码的时候,可以直接添加,十分方便 String [] Shape={"直线","曲线","圆","喷枪","橡皮擦","矩形","椭圆","圆角矩形","弧线","图形"}; for(int i=0;i<Shape.length;i++){ JButton button=new JButton(Shape[i]); button.addActionListener(this); //添加事件监听机制 类(this)应该是有实现了ActionListener这个接口的吧; p0.add(button); } // 颜色按钮 Color [] color={Color.BLACK,Color.blue,Color.white,Color.gray,Color.red,Color.CYAN,Color.green,Color.darkGray,Color.pink}; for(int i=0;i<color.length;i++){ JButton button=new JButton(); button.addActionListener(this); //添加事件监听机制 button.setPreferredSize(new Dimension(40,40)); // 设置按钮的大小 button.setBackground(color[i]); // 设置颜色选择按钮的颜色 p2.add(button); } // 设置背景颜色 p0.setBackground(Color.gray); p1.setBackground(Color.white); p2.setBackground(Color.yellow); // 把p0,p1,p2 上-中-下的方法分配 this.add(p0,BorderLayout.NORTH); this.add(p1,BorderLayout.CENTER); this.add(p2,BorderLayout.SOUTH); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); // 注意:这里鼠标移动和鼠标拖动的事件,是作用在p1的面板上面。。。类(this)应该是有实现了MouseListener,MouseMotionListener p1.addMouseListener(this); p1.addMouseMotionListener(this); } // 当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。对应ActionListener接口 public void actionPerformed(ActionEvent e){ if(e.getActionCommand().equals("")){ //如果没有信息,那就是颜色按钮 JButton button = (JButton) e.getSource(); // getSource()事件最初发生的对象, color = button.getBackground(); System.out.println("color = " + color); }else{ JButton button = (JButton) e.getSource(); shape = button.getActionCommand(); System.out.println("String = " + shape); } } // 当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。 // 在组件上按下鼠标按钮时调用。 public void mousePressed(MouseEvent e) { g=(Graphics2D)p1.getGraphics(); // g = p1.getGraphics(); g.setColor(color); x1=e.getX(); // 返回事件相对于源组件的水平x位置。 y1=e.getY(); if(shape.equals("圆")){ g.drawOval(x1, y1, 30, 30); }else if(shape.equals("矩形")){ g.drawRect(x1, y1, 30, 40); }else if(shape.equals("圆角矩形")){ g.drawRoundRect(x1, y1, 30, 40, 5, 10); }else if(shape.equals("椭圆")){ g.drawOval(x1, y1, 30, 20); }else if(shape.equals("弧线")){ g.drawArc(x1, y1, 100, 80, 10, 180); //(x,y,宽,高,起始角度,结束角度) } // 如果想使用这个图形,下面的new File("这里要添加自己电脑上的图片路径") /*else if (shape.equals("图形")){ try{ img=ImageIO.read(new File("F:\\学习知识\\Java\\画画面板\\imager\\太阳1.bmp")); } catch(IOException e1){ System.out.println(e.toString()); } // drawImage绘制当前可用的指定图像的大小。 该图像在其图形上下文的坐标空间中的左上角( x , y ,宽,高)处绘制。 g.drawImage(img,x1,y1,150,150,null); }*/ System.out.println("x1 = " + x1 +" y1 = " + y1); } // 在组件上单击(按下并释放)鼠标按钮时调用。 public void mouseClicked(MouseEvent e){ } // 当鼠标进入组件时调用。 public void mouseEntered(MouseEvent e){ } // 当鼠标退出组件时调用。 public void mouseExited(MouseEvent e){ } // 松开。搭配前面的按下,就可以画出直线 public void mouseReleased(MouseEvent e){ g.setColor(color); if(shape.equals("直线")){ x2 = e.getX(); y2 = e.getY(); g.drawLine(x1, y1, x2, y2); //通过drawLine方法在两个点之间连一条直线(gr是画笔) } } // 在组件上按下鼠标按钮然后拖动时调用。 public void mouseDragged(MouseEvent e){ x2 = e.getX(); y2 = e.getY(); if (shape.equals("曲线")) { g.drawLine(x1, y1, x2, y2); x1 = x2; y1 = y2; }else if(shape.equals("橡皮擦")){ // Graphics2D中的方法。BasicStroke(float width)--->指的是宽度 g.setStroke(new BasicStroke(80)); // 好像是渲染,应该就是给涂掉 g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setColor(Color.WHITE); g.drawLine(x1, y1, x2, y2); x1 = x2; y1 = y2; }else if(shape.equals("喷枪")){ for(int k=0;k<20;k++){ Random i=new Random(); int a=i.nextInt(8); int b=i.nextInt(10); g.drawLine(x2+a, y2+b, x2+a, y2+b); } } } // 当鼠标光标移动到组件上但没有按钮被按下时调用。(就是光标放到上面) public void mouseMoved(MouseEvent e) { } }
二:展示效果
强行解释:
左上角的那个太阳是我插入的图片,就是“图形”这个按钮。但是我把上面的代码给注释掉了。各位看官要是想使用“图形”的话可以直接把注释去掉。
其实这个“”图形”还可以改进,搞成点击“图形”之后会专门让你选择想要添加的图片,不过不想搞了。 -
用java编写画板
2021-03-13 06:24:14用java编写画板是我学习java的第二个事例,写画板其中要表现的功能在后面的代码中并没有全部实现,只实现了铅笔、刷子、橡皮擦、画直线、画矩形这些功能,其中有用到继承、接口、方法重载、传参等知识点,在代码中我... -
java画板
2021-03-05 18:20:17展开全部//有问题的话,给我发百度消息import java.awt.Color;import java.awt.Cursor;import java.awt.Graphics;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.util.... -
Java制作简单小画板
2020-12-01 15:47:02Java制作简单画板,包括两个类,一个主要画板类Drawpad,一个画板监听器DrawListener类。 1、Drawpad类,包括画板,画板功能设计,保存图片等 package Java课程设计; import java.awt.Graphics; import javax.... -
java画板的设计和创建
2021-02-13 02:16:19首先创建一个画板类继承容器类,这样可以在画板类中重写容器的paint方法。public class DrawFrame extends JPanel再创建一个类写监听器的程序,以及一个类来写画板的内容对象参数保存的方法(可以在最小化以及伸缩... -
用Java实现一个简易画板
2020-08-18 11:19:17//设置窗体属性 draw.setTitle("画板"); draw.setSize(600,500); draw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //添加菜单条JMB JMenuBar JMB = new JMenuBar(); draw.setJMenuBar(JMB);//将... -
java 画板画图程序详解
2021-03-05 14:47:53import java.awt.*;import javax.swing.*;import java.awt.event.*;public class Board {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubWinmain win = new Winmain... -
用Java实现简单画板
2017-03-22 17:05:47文章讲了用窗口监听机制实现简单画板。 -
java代码生成二维码解析能设置背景图 logo
2020-02-25 15:46:14文章目录二维码的简介:第一种:QRCode.jar,使用QRCode...java实现二维码的生成和解析:QRCode、zxing 两种方式 QRCode是日本人开发的ZXing是google开发的 第一种:QRCode.jar,使用QRCode生成和解析二维码 生成二维码... -
java实现画板程序
2012-05-25 19:08:42这是一个java实现的画板程序,可以选择前景色,背景色,可以画椭圆,矩形,直线,曲线,可选择填充模式,可以清空,可以保存打开 -
Java图形化设计 简易画板
2021-06-15 23:48:37在创建画板之前,我们首先创建窗体框架,利用java提供的工具包中的JFrame窗口类就可以创建一个基本的框架。这个框架是我们之后添加画板和画笔的最顶层的容器。就好比吃饭的桌子,没有这个桌子,盘子和碗筷都无法放置... -
java 的画板上面的一个橡皮檫功能
2021-03-09 02:25:51importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;classToolBarextendsJPanel{//工具条Image[]img;//图标数组intselect=0;//选择项ToolBar(String[]s){//构造方法intn=s...import java.awt.*;import ... -
java-----五子棋小游戏(一)-----背景图片制作
2021-03-12 10:38:29import java.awt.Font;//改字体import java.awt.Graphics;//自动调用里面的paint()方法,需要重写import java.awt.Toolkit;//获取电脑屏幕的长和宽import java.awt.event.MouseEvent;import java.awt.event.M... -
在AI中怎么把已知图片在新建画板时候作为画板的背景来建立画板啊!
2021-04-15 19:12:03答:把这个要作为背景的图片(例如 A)拖到现在白色画板的中央,然后再在A的上面新建层,那就是以A为背景了。答:吸引我的,不是它的内容,而是它的背景。这个背景用的是高斯模糊,看上去非常简洁大气。 所以,我突然... -
Java Swing实现画板,可以打开,保存,基本图形,画笔设定
2020-12-09 13:48:34Java Swing实现画板 https://github.com/nekoer723/drawpic 源码已上传 基本要求: 新建一个空白图形文件 打开或者保存一个图形文件 绘制基本图形 直线、矩形、圆、椭圆 任意线 添加文字 设定颜色与... -
java 画板画图程序
2021-03-05 14:48:07导读热词下面是编程之家 jb51.cc 通过网络收集整理的代码...import java.awt.*;import javax.swing.*;import java.awt.event.*;public class Board {/*** @param args*/public static void main(String[] args) {//... -
java透明按钮的设置 .(转)
2021-03-16 04:09:08java透明按钮的设置 .JButton透明背景设置方法1:JButton b1=new JButton();b1.setOpaque(false);b1.setColor(new Color(2,2,2)); //此颜色值随便设置,只起占位作用,但是必须加上此句,否则不会出现透明背景效果。... -
用 JAVA 实现画板
2019-03-07 18:03:15包java.awt中有一个类,叫做Graphics。这个类有很多可以在组件(Component)上绘制图形的方法。 所有组件(Component)类都有一个方法,叫做getGraphics()。如果一个组件已经显示(setVisible(true)),getGraphics()... -
javafx设置背景图片
2020-11-22 10:43:08javafx设置背景图片 使用css setstyle方式 但使用IntelliJ IDEA时,在写路径时会提示错误,但实际上是可以不管的 路径写项目的工作目录的相对路径即可 项目的路径如下: ├── pom.xml ├── src │ ├── data │ ... -
JAVA画板
2021-03-05 21:20:06展开全部import java.awt.Color;import java.awt.Cursor;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt....