怎样在JFrame中设置背景图片
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样在JFrame中设置背景图片相关的知识,希望对你有一定的参考价值。
而且背景图片能随窗口大小的改变而自动改变
小弟初学java,希望高手能指点哈,最好给个能看懂的例子!!
import javax.swing.*;
import java.awt.*;
/**
* @author Hardneedl
*/
final class PictureBackgroundFrame extends JFrame
public String getTitle() return "frame title";
static private final Dimension size = new Dimension(600, 400);
public Dimension getPreferredSize() return size;
public Dimension getMaximumSize() return size;
public Dimension getMinimumSize() return size;
public Dimension getSize() return size;
private static final Image image = Toolkit.getDefaultToolkit().getImage("b.JPG");
private static final JComponent canvas = new JComponent()
protected void paintComponent(Graphics g)
super.paintComponent(g);
Graphics gg = g.create();
gg.drawImage(image,0,0,getWidth(),getHeight(),this);
gg.dispose();
;
PictureBackgroundFrame() throws HeadlessException
attachListeners();
doLay();
private void attachListeners()
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
private void doLay()
Container container = getContentPane();
container.add(canvas);
pack();
setVisible(true);
public static void main(String[] args) new PictureBackgroundFrame();
参考技术A import java.awt.*;import javax.swing.*;import java.awt.Container;public class framebg public framebg() public static void main (String[] args) JFrame frame=new JFrame("背景图设置");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);ImageIcon img = new ImageIcon("bg\\1.gif");//这是背景图片JLabel imgLabel = new JLabel(img);//将背景图放在标签里。frame.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));//注意这里是关键,将背景标签添加到jfram的LayeredPane面板里。imgLabel.setBounds(0,0,img.getIconWidth(), img.getIconHeight());//设置背景标签的位置Container cp=frame.getContentPane();cp.setLayout(new BorderLayout());JButton but=new JButton("anniu");//创建按钮cp.add(but,"North");//将按钮添加入窗口的内容面板((JPanel)cp).setOpaque(false); //注意这里,将内容面板设为透明。这样LayeredPane面板中的背景才能显示出来。frame.setSize(500,300);frame.setVisible(true);import java.awt.*;import javax.swing.*;import java.awt.Container;
public class framebg
public framebg() public static void main (String[] args) JFrame frame=new JFrame("背景图设置");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);ImageIcon img = new ImageIcon("bg\\1.gif");//这是背景图片JLabel imgLabel = new JLabel(img);//将背景图放在标签里。
frame.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));//注意这里是关键,将背景标签添加到jfram的LayeredPane面板里。imgLabel.setBounds(0,0,img.getIconWidth(), img.getIconHeight());//设置背景标签的位置Container cp=frame.getContentPane();cp.setLayout(new BorderLayout());JButton but=new JButton("anniu");//创建按钮cp.add(but,"North");//将按钮添加入窗口的内容面板
((JPanel)cp).setOpaque(false); //注意这里,将内容面板设为透明。这样LayeredPane面板中的背景才能显示出来。
frame.setSize(500,300);frame.setVisible(true);
3
通过为jframe设置背景图片,让我明白了以下的知识要点:(1)jframe窗口的组成部分,最底层是jrootpane面板。(这一点恐怕很多初学者都没有注意吧!)(2)jframe的组成如下:jrootpane中包含glasspane和layeredpane两个面板。而layeredpane面板包含contentpane和jmenubar。(没想到吧contentpane是放在contentpane中的?)(3)在jframe上添加组件,往往是添加在contentpane中。。但是在contentpane的下面还有两层面板,那就是layeredpane和jrootpane。(4)任何一本关于java的书中都会介绍contentpane,却很少提到layeredpane和jrootpane,因此使得很多的初学者产生:jframe中只要一个contentpane的错误认识。
通过解决背景设置的问题,让我对jframe中容器的“层”结构,有个更深层的了解。 参考技术B
把需要设置为JFrame中的背景图片(以zhidao.gif为例)放到与源文件相同的路径下,然后代码如下:
import java.awt.*;import javax.swing.*;
class MyPanel extends JPanel
ImageIcon img;
JButton btnTest1,btnTest2;
MyPanel()
img=new ImageIcon("zhidao.gif");
btnTest1=new JButton("btnTest1");
btnTest2=new JButton("btnTest2");
this.setLayout(new FlowLayout());
add(btnTest1);
add(btnTest2);
public void paint(Graphics g)
g.drawImage(img.getImage(),0,0,this.getWidth(),this.getHeight(),this);
class mainApp
public static void main(String[] args)
JFrame fm=new JFrame("BackGround Image Test");
MyPanel panel=new MyPanel();
fm.getContentPane().add(panel);
fm.show();
Java 在 JFrame 中设置/获取所有组件的文本
【中文标题】Java 在 JFrame 中设置/获取所有组件的文本【英文标题】:Java set/get all component's text in a JFrame 【发布时间】:2017-04-08 02:53:24 【问题描述】:我正在尝试访问 JFrame 中所有组件的文本,但使用我发现的方法我做不到。
for(Component c : this.getComponents())
c.setText(TRNASLATE(c.getText()));
// does not work: no set and getText methods
有没有办法获取或设置组件的文本?
在你问之前:我正在尝试翻译 JFrame 上的元素,而不是手动列出其组件并设置它们的文本(逐个列出它们需要很长时间)
对不起我的英语。
【问题讨论】:
我觉得你可以用instanceof
。
【参考方案1】:
这应该适用于 Java Swing 的任何对象
public static void setSwingObjectText(Object object, String text)
if (object instanceof javax.swing.AbstractButton)
((javax.swing.AbstractButton)object).setText(text);
else if (object instanceof javax.swing.JEditorPane)
((javax.swing.JEditorPane)object).setText(text);
else if (object instanceof javax.swing.JLabel)
((javax.swing.JLabel)object).setText(text);
else if (object instanceof javax.swing.text.JTextComponent)
((javax.swing.text.JTextComponent)object).setText(text);
else if (object instanceof java.awt.Frame)
((java.awt.Frame)object).setTitle(text);
else if (object instanceof java.awt.Dialog)
((java.awt.Dialog)object).setTitle(text);
else if (object instanceof javax.swing.JInternalFrame)
((javax.swing.JInternalFrame)object).setTitle(text);
else if (object instanceof javax.swing.border.TitledBorder)
((javax.swing.border.TitledBorder)object).setTitle(text);
public static String getSwingObjectText(Object object)
if (object instanceof javax.swing.AbstractButton)
return ((javax.swing.AbstractButton)object).getText();
else if (object instanceof javax.swing.JEditorPane)
return ((javax.swing.JEditorPane)object).getText();
else if (object instanceof javax.swing.JLabel)
return ((javax.swing.JLabel)object).getText();
else if (object instanceof javax.swing.text.JTextComponent)
return ((javax.swing.text.JTextComponent)object).getText();
else if (object instanceof java.awt.Frame)
return ((java.awt.Frame)object).getTitle();
else if (object instanceof java.awt.Dialog)
return ((java.awt.Dialog)object).getTitle();
else if (object instanceof javax.swing.JInternalFrame)
return ((javax.swing.JInternalFrame)object).getTitle();
else if (object instanceof javax.swing.border.TitledBorder)
return ((javax.swing.border.TitledBorder)object).getTitle();
else
return null; //no match
【讨论】:
【参考方案2】:您可以使用instanceof
来检查组件是否为某种类型,并将该类型转换为它。大多数组件都有一个 getText() 方法。
例子:
for(Component c : this.getComponents())
if(c instanceof JLabel)
JLabel label = (JLabel) c;
String text = label.getText();
根据需要使用尽可能多的组件类型重复 instanceof
。
【讨论】:
以上是关于怎样在JFrame中设置背景图片的主要内容,如果未能解决你的问题,请参考以下文章