java:拉动窗口g改变大小后,窗口上的按钮不见了,鼠标经过后又显示,为何会这样? 15
我在学习给窗口设置背景图,且图片随着窗口大小的改变而改变,可是改变窗口大小后,其他按钮不见了。。。。在鼠标经过按钮时按钮又显示出来了。。。怎么办?怎么让按钮按钮不消失?如...
我在学习给窗口设置背景图,且图片随着窗口大小的改变而改变,可是改变窗口大小后,其他按钮不见了。。。。在鼠标经过按钮时按钮又显示出来了。。。怎么办?怎么让按钮按钮不消失?
如图:
代码:
package test;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class JImagePane extends JLabel
{
private static final long serialVersionUID = -8251916094895167058L;
private Image backgroundImage;
protected void paintComponent(Graphics g)
{
g.drawImage(backgroundImage, 0, 0,
this.getWidth(),this.getHeight(), this);
}
public static void main(String[] args)
{
JImagePane imagePane = new JImagePane();
imagePane.backgroundImage=(new ImageIcon("f:\\ai.jpg")).getImage();
//背景面板
JFrame frame = new JFrame("JImagePane Test");
Container con=frame.getLayeredPane();
con.setLayout(new BorderLayout());
con.add(imagePane);
//主面板
Container contenPane=frame.getContentPane();
JPanel jp=new JPanel();
JButton jbu=new JButton("换背景");
jp.add(jbu);
jp.setOpaque(false);
contenPane.add(jp);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);//居中显示
frame.setVisible(true);
}
} 展开
如图:
代码:
package test;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class JImagePane extends JLabel
{
private static final long serialVersionUID = -8251916094895167058L;
private Image backgroundImage;
protected void paintComponent(Graphics g)
{
g.drawImage(backgroundImage, 0, 0,
this.getWidth(),this.getHeight(), this);
}
public static void main(String[] args)
{
JImagePane imagePane = new JImagePane();
imagePane.backgroundImage=(new ImageIcon("f:\\ai.jpg")).getImage();
//背景面板
JFrame frame = new JFrame("JImagePane Test");
Container con=frame.getLayeredPane();
con.setLayout(new BorderLayout());
con.add(imagePane);
//主面板
Container contenPane=frame.getContentPane();
JPanel jp=new JPanel();
JButton jbu=new JButton("换背景");
jp.add(jbu);
jp.setOpaque(false);
contenPane.add(jp);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);//居中显示
frame.setVisible(true);
}
} 展开
1个回答
展开全部
package test;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class JImagePane extends JLabel {
private static final long serialVersionUID = -8251916094895167058L;
private Image backgroundImage;
protected void paintComponent(Graphics g) {
g.drawImage(backgroundImage, 0, 0, getWidth(), getHeight(),this);
super.paintComponent(g);// 这里需要完成组件原来的绘制
}
public static void main(String[] args) {
// 背景面板
JFrame frame = new JFrame("JImagePane Test");
// 主面板
Container contenPane = frame.getContentPane();
JPanel jp = new JPanel() {};
JButton jbu = new JButton("换背景");
jp.add(jbu);
jp.setOpaque(false);
JImagePane imagePane = new JImagePane();
imagePane.backgroundImage = (new ImageIcon("f:\\ai.jpg")).getImage();
imagePane.setLayout(new BorderLayout());// 设置图片组件的布局
imagePane.add(jp, BorderLayout.NORTH);// 在图片组件上增加新的控件
contenPane.add(imagePane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);// 居中显示
frame.setVisible(true);
}
}
说明:
1、JImagePane类的paintComponent方法中需要完成原来的绘制。
2、由于需要在JImagePane上直接显示按钮,所有布局和添加按钮都是在JImagePane的实例上进行。
追问
大神啊,这样是可以了。可是这跟网上说的一般背景都是放在第二层(layeredpane)啊,按照你的方法是把背景也放在最上层了,一般我们所用的软件的背景都放在哪个层呢?又是用什么方法来设置背景图的?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询