JFrame绘制的背景和增加按钮显示有问题

cdlmagical 2009-05-07 11:04:11
想为JFrame绘制一个图片背景图片
然后在JFrame窗体上增加一些按钮,问题就出现了,增加的按钮不能自动全部显示出来:


鼠标经过后才能显示,但还会隐藏起来:


下面是我的代码:
Bg.java

import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Bg extends JFrame {

private int width, height;
private BufferedImage bgImage;

private JButton btnStart;
private JButton btnSet;
private JButton btnHelp;
private JButton btnLose;
private JButton btnAbout;
private JButton btnExit;


public Bg() {
this.setTitle("五子棋");
width = height = 500;
this.setSize(width, height);
this.setResizable(false);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);

//背景图片
bgImage = null;
try {
bgImage = ImageIO.read(new File("background.png"));
} catch (IOException e) {
e.printStackTrace();
}

this.setLayout(null);

btnStart = new JButton("开始");
btnSet = new JButton("设置");
btnHelp = new JButton("说明");
btnLose = new JButton("认输");
btnAbout = new JButton("关于");
btnExit = new JButton("退出");

btnStart.setBounds(397, 48, 70, 30);
btnSet.setBounds(397, 98, 70, 30);
btnHelp.setBounds(397, 148, 70, 30);
btnLose.setBounds(397, 248, 70, 30);
btnAbout.setBounds(397, 298, 70, 30);
btnExit.setBounds(397, 348, 70, 30);

add(btnStart);
add(btnSet);
add(btnHelp);
add(btnLose);
add(btnAbout);
add(btnExit);

setVisible(true);
}

public void paint(Graphics g) {
g.drawImage(bgImage, 0, 20, this);
}
}


RunBg.java

public class RunBg {
public static void main(String[] args) {
new Bg();
}
}


源文件:
background.png(500*500):


麻烦大家帮忙!谢谢!
...全文
555 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdlmagical 2009-05-08
  • 打赏
  • 举报
回复
哈哈,谢谢Emerson_Li的帮忙,还qusic,思路是正确的,问题解决了!
修改后的代码如下:

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Bg extends JFrame {

private int width, height;
private BufferedImage bgImage;

private JButton btnStart;
private JButton btnSet;
private JButton btnHelp;
private JButton btnLose;
private JButton btnAbout;
private JButton btnExit;

private Jpanetemp panel;

public Bg() {
this.setTitle("五子棋");
width = height = 500;
this.setSize(width, height);
this.setResizable(false);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);

//背景图片
bgImage = null;
try {
bgImage = ImageIO.read(new File("background.png"));
} catch (IOException e) {
e.printStackTrace();
}

panel = new Jpanetemp();
this.getContentPane().add(panel);
panel.setLayout(null);

btnStart = new JButton("开始");
btnSet = new JButton("设置");
btnHelp = new JButton("说明");
btnLose = new JButton("认输");
btnAbout = new JButton("关于");
btnExit = new JButton("退出");

btnStart.setBounds(397, 48, 70, 30);
btnSet.setBounds(397, 98, 70, 30);
btnHelp.setBounds(397, 148, 70, 30);
btnLose.setBounds(397, 248, 70, 30);
btnAbout.setBounds(397, 298, 70, 30);
btnExit.setBounds(397, 348, 70, 30);

panel.add(btnStart);
panel.add(btnSet);
panel.add(btnHelp);
panel.add(btnLose);
panel.add(btnAbout);
panel.add(btnExit);

setVisible(true);
//repaint();
}

/*public void paint(Graphics g) {
//g.drawImage(bgImage, 0, 20, this);
super.paint(g);
getContentPane().getGraphics().drawImage(bgImage, 0, 20, this);
btnSet.repaint();
btnHelp.repaint();
btnLose.repaint();
}*/

/*@Override
public void paintComponents(Graphics g) {
g.drawImage(bgImage, 0, 20, this);
super.paintComponents(g);
}*/
class Jpanetemp extends JPanel {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(bgImage, -3, -3, this);
}
}
}


再次谢谢大家的帮助!
Emerson_Li 2009-05-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 cdlmagical 的回复:]
引用 2 楼 Emerson_Li 的回复:
我不是很懂你的意思,我的理解是:你要绘制一张背景,但是背景把按钮覆盖了~~
我想如果你要绘制背景的话,应该不是覆盖 JFrame 的
public void paint(Graphics g)
而应该重写他的
protected void paintComponent(Graphics g) 方法

protected void paintComponent(Graphics g) 示例如下:

protected void paintComponent(Graphics g)
{
g.drawImage(bgImage, 0, 20, this);
super.paintCom…
[/Quote]


在这里,我首先要向你道歉,不好意思,protected void paintComponent(Graphics g)不是JFrame的继承方法
这个方法是JComponent的方法,JComponent类是除顶层容器外所有 Swing 组件的基类,可惜的是JFrame正好是顶层容器。
所以这里你写了protected void paintComponent(Graphics g),编译器不会报错,他会认为你新建了一个新方法,你debug调试的时候会发现
这个方法根本没调用,所以当然不会有图片

看了前面6 楼 KingOf007的回复,发现他的方法目前来说是唯一可行的,你原来的之所以不会有按钮,是因为你没调用他父类的paint方法
而他父类的paint方法,管的就是绘制子容器,但是你加了super.paint(g);又不会有图片,因为super.paint方法会先用默认色填充背景,把你的背景覆盖掉

其实,让我去做,我会先在JFrame上放置一个JPane,JPane是JComponent的子类。这样你就可以重写JPane的paintComponent方法了
小提示:在这里我们重载了paintComponent()方法,而不是paint()方法,这是很重要的一点,要不然子类将不会被重新绘制。

import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Bg extends JFrame {

private int width, height;
private BufferedImage bgImage;

private JButton btnStart;
private JButton btnSet;
private JButton btnHelp;
private JButton btnLose;
private JButton btnAbout;
private JButton btnExit;
private Jpanetemp pane1;

public Bg() {
this.setTitle("五子棋");
width = height = 500;
this.setSize(width, height);
this.setResizable(false);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
pane1=new Jpanetemp();
getContentPane().add(pane1, BorderLayout.CENTER);
// 背景图片
bgImage = null;
try {
bgImage = ImageIO.read(new File("background.png"));
} catch (IOException e) {
e.printStackTrace();
}

pane1.setLayout(null);

btnStart = new JButton("开始");
btnSet = new JButton("设置");
btnHelp = new JButton("说明");
btnLose = new JButton("认输");
btnAbout = new JButton("关于");
btnExit = new JButton("退出");

btnStart.setBounds(397, 48, 70, 30);
btnSet.setBounds(397, 98, 70, 30);
btnHelp.setBounds(397, 148, 70, 30);
btnLose.setBounds(397, 248, 70, 30);
btnAbout.setBounds(397, 298, 70, 30);
btnExit.setBounds(397, 348, 70, 30);

pane1.add(btnStart);
pane1.add(btnSet);
pane1.add(btnHelp);
pane1.add(btnLose);
pane1.add(btnAbout);
pane1.add(btnExit);

setVisible(true);
}

class Jpanetemp extends JPanel {

@Override
protected void paintComponent(Graphics g) {

g.drawImage(bgImage, 0, 20, this);

// super.paintComponent(g);
}

}
}



位置有点不对,你自己调一下。
qusic 2009-05-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 cdlmagical 的回复:]
引用 6 楼 KingOf007 的回复:
Java code
public void paint(Graphics g) {
super.paint(g);
getContentPane().getGraphics().drawImage(bgImage, 0, 20, this);
btnSet.repaint();
btnHelp.repaint();
......
}

哈哈,这种方法可行哦!!
2,7,8楼的方法应该怎么改才能将图片显示出来呢?
研究中...
[/Quote]
就是自己写个组件当容器,可以继承自JPanel什么的,
然后在重写它的paintComponent方法!
把东西都放到这个容器里,然后把容器放到JFrame中!
thereisawill 2009-05-08
  • 打赏
  • 举报
回复

D:\>javac RunBg.java

D:\>java RunBg
javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(ImageIO.java:1275)
at Bg.<init>(Bg.java:35)
at RunBg.main(RunBg.java:3)
学习学习,没看懂,因为还没学....也来帮你运行下过把瘾....
GeekZFZ 2009-05-07
  • 打赏
  • 举报
回复
路过
  • 打赏
  • 举报
回复
在setVisible(true);
后面加一句
repaint();
试试看
Emerson_Li 2009-05-07
  • 打赏
  • 举报
回复
我不是很懂你的意思,我的理解是:你要绘制一张背景,但是背景把按钮覆盖了~~
我想如果你要绘制背景的话,应该不是覆盖 JFrame 的
public void paint(Graphics g)
而应该重写他的
protected void paintComponent(Graphics g) 方法

protected void paintComponent(Graphics g) 示例如下:

protected void paintComponent(Graphics g)
{
g.drawImage(bgImage, 0, 20, this);
super.paintComponent(g);
}
imasmallbird 2009-05-07
  • 打赏
  • 举报
回复
没咋看出问题来,你截的那几张图上不都不按钮吗?
而且这个代码也不是你的全部代码吧~~
cdlmagical 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 KingOf007 的回复:]
Java code
public void paint(Graphics g) {
super.paint(g);
getContentPane().getGraphics().drawImage(bgImage, 0, 20, this);
btnSet.repaint();
btnHelp.repaint();
......
}
[/Quote]
哈哈,这种方法可行哦!!
2,7,8楼的方法应该怎么改才能将图片显示出来呢?
研究中...
cdlmagical 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 Emerson_Li 的回复:]
我不是很懂你的意思,我的理解是:你要绘制一张背景,但是背景把按钮覆盖了~~
我想如果你要绘制背景的话,应该不是覆盖 JFrame 的
public void paint(Graphics g)
而应该重写他的
protected void paintComponent(Graphics g) 方法

protected void paintComponent(Graphics g) 示例如下:

protected void paintComponent(Graphics g)
{
g.drawImage(bgImage, 0, 20, this);
super.paintComponent(g);
}
[/Quote]
我的意思就是你说的那样,但是你所说的方法不能解决这个问题
我将
public void paint(Graphics g) {
g.drawImage(bgImage, 0, 20, this);
super.paintComponents(g);
}

换成
public void paintComponents(Graphics g) {
g.drawImage(bgImage, 0, 20, this);
super.paintComponents(g);
}

背景图片就不显示了!
cdlmagical 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 imasmallbird 的回复:]
没咋看出问题来,你截的那几张图上不都不按钮吗?
而且这个代码也不是你的全部代码吧~~
[/Quote]
请看清楚问题哦
joezhang89 2009-05-07
  • 打赏
  • 举报
回复
public class RunBg {
public static void main(String[] args) {
new Bg();
}
}

black_night 2009-05-07
  • 打赏
  • 举报
回复
将public void paint(Graphics g)
改为public void paintComponent(Graphics g)试试
上次遇到个类似的。
qusic 2009-05-07
  • 打赏
  • 举报
回复
不要重写JFrame 的paint方法
画背景的话,可以重写内部容器的paintComponent方法
将背景画的组件上面!
KingOf007 2009-05-07
  • 打赏
  • 举报
回复
    
public void paint(Graphics g) {
super.paint(g);
getContentPane().getGraphics().drawImage(bgImage, 0, 20, this);
btnSet.repaint();
btnHelp.repaint();
......
}
KingOf007 2009-05-07
  • 打赏
  • 举报
回复
加完按钮pack()一下
计算器 一、 背景描述 该计算器模仿Windows自带的计算器,只实现标准型计算器功能。 在完成Swing的学习后,练习使用Swing包中JFrame、JButton、JLabel、JTextField、JMenu、JMenuItem等组件完成图形界面绘制。 二、 实现要求 前期能够独立思考并完成计算器的逻辑代码。 三、 实现技术 a) 熟练使用JButton、JTextField、JLabel等Swing包中组件。 b) 熟练使用BorderLayout、FlowLayout、BoxLayout、GridLayout等布局。 c) 能够根据需要覆盖paint函数,定制自己需要的组件。 四、 类图 a) 类图 b) 类图说明 类名称 Calculator 类描述 计算器界面类。 包描述 main 函数描述 Calculator() 计算器界面类缺省构造函数。 private void initMenu() 初始化菜单添加。 private void initButton() 初始化按钮按钮的初始化、部署、事件添加等。 private void initAdd() 初始化各个容器的添加。 public void actionPerformed(ActionEvent e) 处理按钮事件。1.复制事件2.粘贴事件,此处应用正则表达式(详细请参考类 java.util.regex.Pattern)解析粘贴板中的内容,仅得到内容中最后的数字和小数点。3.关于事件 private boolean isContain(String str,String ch) 检测某字符串中是否包含某个字符串。 private void showResult(String result) 设置计算的得到的结果。 private void clearAll(String result) 清空结果。 private void countResult(double value2) 计算结果并显示结果。 内部类 private class ButtonListener extends AbstractAction 按钮事件。包括+、-、*、/、1/x、数字等按钮事件。 此类继承AbstractAction 类名称 CalculateButton 类描述 定制自己的按钮类。练习自己定制按钮。比如定制按钮的高度、宽度、文字等。 包描述 main 函数描述 public CalculateButton(Action listener,String text,int key,boolean isctrl) 构造一个具有缺省事件、指定文本、指定快捷键的JButton。 public CalculateButton(Action listener,String text,int key,boolean isctrl,Color color) 构造一个具有缺省事件、指定文本、指定快捷键、指定文本颜色的JButton。 public CalculateButton(Action listener,String text,int key,boolean isctrl,Color color,int width,int height) 构造一个具有缺省事件、指定文本、指定快捷键、指定文本颜色的JButton。 protected void paintBorder(Graphics g) 绘制边界。 c) 效果图 五、 技术技巧提问 a) 思考用户如果多次连续按如+、-、*、/等键时,应该怎么处理?请仔细考虑好该逻辑。 b) 练习使用剪贴板的功能,实现复制、粘贴功能。考虑当粘贴板中数据值带有多个小数点时如何处理然后显示到文字框上。
Java拼图游戏面向对象课程设计报告 ———————————————————————————————— 作者: ———————————————————————————————— 日期: "姓 名 " "学 号 "20137045 "班 级 " " "Name " "Student No." "Class " " "代码总行数"222 "项目名称 " " "Code Lines" "Item " " "1.实验目的 " "本次课程设计旨在通过一个完整项目的开发,巩固面向对象程序设计、软件工程、 " "数据库技术等课程的相关知识,加深学生对Java语言的理解,尤其是对面向对象思" "想、Java编码规范、JDBC访问数据库的理解,使学生进一步掌握环境构建、代码编 " "写、文档阅读与理解、文档编写、软件测试、发行与部署等技能,进一步提高学生 " "的学习能力、理解能力、表达能力及沟通能力. " "2.实验内容 " "本次课程设计选定的实验项目是使用JAVA语言编写一个拼图游戏并实现其基本功能" "。不用自己手动切割图片,再进行加载.而是应用类方法在内存中进行图片切割和 " "加载,方便了用户的使用。 " "利用了Graphics中的public abstract boolean drawImage()方法把 img 中由 " "(sx1, sy1)(sx2, sy2)指定的矩形区域画到 observer 中由(dx1, dy1)(dx2, " "dy2)指定的矩形区域内进行构思拼图游戏的具体实现。 " "导入了一个可播放背景音乐的jar包,在玩游戏时可以欣赏背景音乐。 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "3.类图 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "4.运行界面 " " " "图1、游戏初始界面 " " " "图2、游戏运行界面 " " " " " " " "图3、拼图成功界面 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "5.关键代码(要求在类的定义以及方法定义的前面给出相关描述信息) " "//定义一个Pintu类 " "public class Jpgsaw extends JFrame{ " "private Image image, buff; //原始图片,缓存图片 " "private int[][] map = {{0, 1, 2}, " "{3, 4, 5}, " "{6, 7, 8} " "}; //定义数组map,给分割后的图片标号 " "private Point point = new Point(2, 2); //记录第九块图片位置 " "private int sx; //分割后每一个图片的宽度 " "private int sy; //分割后每一个图片的高度 " "private Canvas canvas; " "//加载图片容器,定义可以显式定位子元素使用坐标是相对 Canvas " "区域的区域,绘制图形 " "private Graphics gs; //gs画出Canvas图片坐标 " "private Graphics gb; //gb画出buff图像 " "private boolean isRunning = false; //游戏是否正在进行 " "private JButton start = new JButton("开始新的游戏"); // 按钮1 " "private JButton show = new JButton("显示正确图片"); //按钮2 " "private JTextArea showStep = new JTextArea("显示步骤");//设置步骤显示 " "private JPanel panel = new JPanel(); " "//一般轻量级面板容器,装在上面2个按钮 " "private int steps = 0; // 记录移动的步骤 " "public Jpgsaw(String title) { //构造方法,初始化变量 " "super(title);//调用了当前类Jpgsaw的父类JFrame的构造方法 " "try { //异常抛出 " "image = ImageIO.read(new File("gg。jpg")); /
package com.Login; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.Point; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; import javax.swing.UIManager; import com.jdbc.DB; import com.window.Main; public class Login extends JFrame { private JPanel contentPane; private Point pressedPoint; /*private final class LoginActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { // 显示窗体的登录进度面板 getGlassPane().setVisible(true); } }*/ public static void main(String[] args) { try { UIManager .setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); } catch (Throwable e) { e.printStackTrace(); } EventQueue.invokeLater(new Runnable() { public void run() { try { Login frame = new Login (); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } public Login(){ super("登录"); addWindowListener(new WindowAdapter() { @Override public void windowOpened(WindowEvent e) { do_this_windowOpened(e); } }); setUndecorated(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(380,280); setIconImage(new ImageIcon("image\\tubiao.png").getImage()); Dimension displaySize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize=this.getSize(); setLocation((displaySize.width - frameSize.width) / 2+(frameSize.width)/2,(displaySize.height - frameSize.height) / 2); contentPane=new JPanel(); contentPane.setBorder(BorderFactory.createLineBorder(Color.BLACK)); //设置边框为无 contentPane.setLayout(new BorderLayout(0,0));//设置contentPane的布局 setContentPane(contentPane);// JPanel topPanel = new JPanel(){ public void paintComponent(Graphics g) { g.drawImage(new ImageIcon("image\\logintop1.jpg").getImage(), 0, 0,500,48, null); super.paintComponent(g); } };//标题栏panel topPanel.addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(MouseEvent e) { do_topPanel_mouseDragged(e); } }); topPanel.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { do_topPanel_mousePressed(e); } }); topPanel.setOpaque(false);//设置背景透明 topPanel.setPreferredSize(new Dimension(500,30)); topPanel.setLayout(null); JPanel panel = new JPanel(); panel.setBounds(312, 0, 66, 15); panel.setOpaque(false); topPanel.add(panel); panel.setLayout(new GridLayout(1, 0, 0, 0)); JButton button = new JButton(""); button.setRolloverIcon(new ImageIcon("image\\button4.png")); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { do_button_itemStateChanged(e); } }); button.setFocusPainted(false);// 取消焦点绘制 button.setBorderPainted(false);// 取消边框绘制 button.setContentAreaFilled(false);// 取消内容绘制 button.setIcon(new ImageIcon("image\\button4-1.png")); panel.add(button); JButton button_2 = new JButton(""); button_2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { do_button_2_actionPerformed(e); } }); button_2.setRolloverIcon(new ImageIcon("image\\button3.png")); button_2.setFocusPainted(false); button_2.setContentAreaFilled(false); button_2.setBorderPainted(false); button_2.setIcon(new ImageIcon("image\\button3-1.png")); panel.add(button_2); contentPane.add(topPanel, BorderLayout.NORTH); JPanel backgroundPanel = new JPanel(){ public void paintComponent(Graphics g) { g.drawImage(new ImageIcon("image\\loginframe1.jpg").getImage(), 0, 0,500,300, null); super.paintComponent(g); } };//panel backgroundPanel.setLayout(new GridLayout(1,1)); backgroundPanel.setOpaque(false); JPanel panel1 = new JPanel() { public void paintComponent(Graphics g) { g.drawImage(new ImageIcon("image\\4.png").getImage(), 0, 0,420,200, null); super.paintComponent(g); } }; panel1.setLayout(null); panel1.setOpaque(false); JLabel label1=new JLabel("用户名:"); JLabel label2=new JLabel("密 码:"); final JTextField text1=new JTextField(15); final JPasswordField text2=new JPasswordField(15); label1.setBounds(80,60,60,30); text1.setBounds(160, 60, 150,30); label2.setBounds(80,120,60,30); text2.setBounds( 160, 120, 150, 30); panel1.add(label1); panel1.add(text1); panel1.add(label2); panel1.add(text2); backgroundPanel.add(panel1); contentPane.add(backgroundPanel, BorderLayout.CENTER); JPanel panel2 =new JPanel(); //panel2.setPreferredSize(new Dimension(380,40)); panel2.setLayout(null); panel2.setOpaque(false); JButton button1=new JButton("登录"); JButton button2=new JButton("取消"); MouseAdapter mouseAdapter = new MouseAdapter() {// 创建鼠标事件监听器 private Rectangle sourceRec;// 创建矩形对象 @Override public void mouseEntered(MouseEvent e) { JButton button = (JButton) e.getSource();// 获取事件源按钮 sourceRec = button.getBounds();// 保存按钮大小 button.setBounds(sourceRec.x-5, sourceRec.y-5, sourceRec.width + 10, sourceRec.height + 10);// 把按钮放大 super.mouseEntered(e); } @Override public void mouseExited(MouseEvent e) { JButton button = (JButton) e.getSource();// 获取事件源按钮 if (sourceRec != null) {// 如果有备份矩形则用它恢复按钮大小 button.setBounds(sourceRec);// 设置按钮大小 } super.mouseExited(e); } }; button1.addMouseListener(mouseAdapter); button2.addMouseListener(mouseAdapter); button1.setBackground(new Color(154,216,230)); button2.setBackground(new Color(154,216,230)); //button1.setBorder(BorderFactory.createLineBorder(Color.blue) ); //button1.setBorder(new EmptyBorder(10, 0, 0, 0));// 顶部留白:40pix //button2.setBorder(new EmptyBorder(10, 0, 0, 0));// 顶部留白:40pix button1.setBounds(190, 9,70, 30); button2.setBounds(280, 9,70, 30); panel2.add(button1); panel2.add(button2); panel2.setBounds(0, 200, 380, 50); panel1.add(panel2); //button1.addActionListener( new LoginActionListener()); button1.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent event) { Connection con = null; PreparedStatement pstmt = null; ResultSet rs=null; Statement stmt=null; try{ con=DB.getConnection(); pstmt = con.prepareStatement("select *from tb_manager where id=? and password=?"); pstmt.setString(1, text1.getText()); pstmt.setString(2, text2.getText()); rs=pstmt.executeQuery(); JOptionPane pane=new JOptionPane(); if(rs.next()) { // new LoginActionListener(); pane.showMessageDialog(null, "登录成功!"); // new Main(); new Main(); dispose();// 销毁窗体 con.close(); } else if(text1.getText().equals("")||text2.getText().equals("")) { pane.showMessageDialog(null, " 登录失败!用户名或密码不能为空,请重新输入!"); text1.setText(""); text2.setText(""); } else { pane.showMessageDialog(null, "登录失败,你输入的用户名或密码错误,请重新输入!"); text1.setText(""); text2.setText(""); } }catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { DB.close(pstmt); DB.close(pstmt); } } } ); button2.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent event) { System.exit(0); } } ); } protected void do_button_itemStateChanged(ActionEvent e) { setExtendedState(JFrame.ICONIFIED);// 窗体最小化 } protected void do_button_2_actionPerformed(ActionEvent e) { dispose();// 销毁窗体 } protected void do_topPanel_mousePressed(MouseEvent e) { pressedPoint = e.getPoint();// 记录鼠标坐标 } protected void do_topPanel_mouseDragged(MouseEvent e) { Point point = e.getPoint();// 获取当前坐标 Point locationPoint = getLocation();// 获取窗体坐标 int x = locationPoint.x + point.x - pressedPoint.x;// 计算移动后的新坐标 int y = locationPoint.y + point.y - pressedPoint.y; setLocation(x, y);// 改变窗体位置 } protected void do_this_windowOpened(WindowEvent e) { final int height = getHeight();// 记录窗体高度 new Thread() {// 创建新线程 public void run() { Rectangle rec = getBounds(); for (int i = 0; i < 385; i += 10) {// 循环拉伸窗体 setBounds(rec.x - i / 2, rec.y, i, height);// 不断设置窗体大小与位置 try { Thread.sleep(15);// 线程休眠10毫秒 } catch (InterruptedException e1) { e1.printStackTrace(); } } } }.start();// 启动线程 } }

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧