精华内容
下载资源
问答
  • java背景图片设置问题:关于graphics问题 设置一个五子棋窗体,然后加入背景图片,但是效果却是透明的
    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);

    }

    }

    }

    }

    2Q==

    已赞过

    已踩过<

    你对这个回答的评价是?

    评论

    收起

    更多相关内容
  • 自定义JPanel面板背景一、前言1.GUI全称是Graphical User Interface,就是图形用户界面。JAVA的GUI应用广泛在我们生活中也很常见。很多应用使用该GUI编程设计,像点击QQ图标弹出对应的登录窗体。一般程序与用户的...

    自定义JPanel面板背景

    一、前言

    1.GUI全称是Graphical User Interface,就是图形用户界面。JAVA的GUI应用广泛在我们生活中也很常见。很多应用使用该GUI编程设计,像点击QQ图标弹出对应的登录窗体。

    9d3af61a5387698083fe104a63184cd5.png

    一般程序与用户的交互都基于对应程序的运行界面。

    2.JPanel面板是SWING下的一个面板容器类。该面板支持嵌套,可设置布局方式,设置不同的布局管理器可添加其他控件像JButton按钮,JTextField文本框等。来设计完善一个程序界面窗体。

    作为绘制面板支持setBackground()设置背景颜色的方法还远远不够。这里实现自定义为JPanel设置图片背景。

    二、平台工具

    1.MyEclipse

    此处演示使用myeclipse2014

    其他支持java awt+swing平台也可

    三、图文展示

    1.同一窗体下做不同处理JPanel的效果

    (1)首先创建一个不加修饰的窗体,一般的普通默认jpanel界面效果如下:

    2034c3f4245aaf4c880be531f1801a4e.png

    (2)简单的设置背景颜色效果:

    6139bb2361fa74610512262829fd6a65.png

    (3)自定义处理后的JPanel下的窗体效果:

    8097cc7d5492823794a8873b11009a82.png

    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)实现效果如图所示:

    787a198af7f60a9d8ce31ac94b752fd2.png

    GUI设计中布局是基础也是十分重要的知识。

    熟练使用掌握三大布局及其他布局管理器需要自己敲代码练习了^_^

    展开全文
  • java编写的画板

    2015-01-19 10:23:24
    这是一个用Java GUI编写的画板程序,自编代码,java课程设计 实现铅笔,橡皮,功能,可以画直线,矩形,圆等各种形状,可以保存读取所画图片,更改背景等。也有图片。可根据自己需求添加新功能,有一些功能也供大家...
  • java写的画板

    2017-12-05 19:34:25
    (3)设置边框布局,因为整个画板大致为左边部分,中间部分,菜单栏三个部分,用边框布局比较合适; (4)给窗体添加左面板,中间面板; (5)给左面板添加按钮,并设置按钮图片和效果; (6)给左面板添加左子面板...
  • 几何画板本身并没有像word之类的可以将图片设置背景,他只能设置背景颜色。但是可以通过两种折中的方法来实现,不过有缺点,就是图片不能随窗口的变动而变动。下面小编就和大家一起来看看具体是如何在几何画板中...

    几何画板本身并没有像word之类的可以将图片设置成背景,他只能设置背景颜色。但是可以通过两种折中的方法来实现,不过有缺点,就是图片不能随窗口的变动而变动。下面小编就和大家一起来看看具体是如何在几何画板中操作的。

    方法一 取消图片被选中属性

    步骤一 打开几何画板,将要作为背景的图片选中并拖动到几何画板编辑区域里面,调整图片到软件窗口大小,如下图所示。

    a1dbe8d518359cf09280524007eceb8c.png

    在几何画板中插入背景图片示例

    步骤二 选中图片,鼠标右键,选择“属性”选项,在弹出的属性对话框下面有个“可以被选中”选项,将其前面的勾去掉,点击“确定”。

    8f9c8a2eff0cef468150154dab281e01.png

    在属性对话框取消图片被选中示例

    按照以上步骤操作以后,你会发现在接下来的操作中图片都是无法选中的,也是不会随意动的,这样就将此图片作为了背景图片。

    方法二:利用固定点插入背景图片

    步骤一 制作不能移动的点。打开几何画板软件,选择“点工具”在画板空白区域的中间绘制一个点,使用“选择工具”选中此点,鼠标右键选择“属性”,在弹出的属性对话框下面有个“可以被选中”选项,将其前面的勾去掉,点击“确定”。

    594461028ca14a95af50f0f80eb8e2e5.png

    在属性对话框取消点被选中示例

    步骤二 把图片复制到点上。将要作为背景的图片复制到几何画板中,选中点和图片,按住Shift键,执行“编辑”——“合并图片到点”命令,此时图片就会以点为中心,均匀分布在该点的四周。

    30a184739316e3bec90cf5cfe0ab6b25.png

    执行合并图片到点命令示例

    步骤三 选中图片鼠标右键,选择“属性”选项,在弹出的属性对话框下面有个“可以被选中”选项,将其前面的勾去掉,点击“确定”。再执行隐藏点命令,那么这张背景图片也是永远不会动的。

    bbea514769b96da95c4868fc654b0c1f.png

    在图片属性下取消勾选图片被选中示例

    以上给大家总结了在几何画板中添加背景图片的两种方法,虽然图片不能随窗口的变动而变动,但对于美化课件来说,是一个可行的方案。如果你对于更改几何画板背景颜色不知道如何操作,可参考:在几何画板中如何更改背景颜色。

    展开全文
  • 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:02
    Java制作简单画板,包括两个类,一个主要画板类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);//将...
  • import 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
    文章讲了用窗口监听机制实现简单画板
  • 文章目录二维码的简介:第一种:QRCode.jar,使用QRCode...java实现二维码的生成和解析:QRCode、zxing 两种方式 QRCode是日本人开发的ZXing是google开发的 第一种:QRCode.jar,使用QRCode生成和解析二维码 生成二维码...
  • java实现画板程序

    2012-05-25 19:08:42
    这是一个java实现的画板程序,可以选择前景色,背景色,可以画椭圆,矩形,直线,曲线,可选择填充模式,可以清空,可以保存打开
  • 在创建画板之前,我们首先创建窗体框架,利用java提供的工具包中的JFrame窗口类就可以创建一个基本的框架。这个框架是我们之后添加画板和画笔的最顶层的容器。就好比吃饭的桌子,没有这个桌子,盘子和碗筷都无法放置...
  • importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;classToolBarextendsJPanel{//工具条Image[]img;//图标数组intselect=0;//选择项ToolBar(String[]s){//构造方法intn=s...import java.awt.*;import ...
  • import java.awt.Font;//改字体import java.awt.Graphics;//自动调用里面的paint()方法,需要重写import java.awt.Toolkit;//获取电脑屏幕的长和宽import java.awt.event.MouseEvent;import java.awt.event.M...
  • 答:把这个要作为背景的图片(例如 A)拖到现在白色画板的中央,然后再在A的上面新建层,那就是以A为背景了。答:吸引我的,不是它的内容,而是它的背景。这个背景用的是高斯模糊,看上去非常简洁大气。 所以,我突然...
  • Java 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透明按钮的设置 .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:08
    javafx设置背景图片 使用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....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,966
精华内容 1,186
关键字:

java设置画板背景

java 订阅