之前学过Java的GUI,写过简单的例子。昨天朋友问怎么能为窗口设置背景图片,且让文字在背景上边显示,挺简单的要求折腾了好一会儿才实现…mark一下。
一、最终效果图:
二、源码
public class Client extends JFrame {
private JTextField enter;
private JTextArea display;
public Client()
{
//设置背景图
ImageIcon icon=new ImageIcon("src\\images\\bcg.jpg");//背景图
JLabel label = new JLabel(icon);//往一个标签中加入图片
label.setBounds(0, 0, icon.getIconWidth(),icon.getIconHeight());//设置标签位置大小为图片大小
this.getLayeredPane().add(label, Integer.valueOf(Integer.MIN_VALUE));//标签添加到第二层面板
//获取顶层容器设为透明
JPanel imPanel = (JPanel)getContentPane();
imPanel.setOpaque(false);
//建立透明文本显示区面板
JPanel displayPanel=new JPanel();
displayPanel.setOpaque(false);
//建立透明的JTextArea以显示输出内容
display = new JTextArea(10,10);
display.setText("Connnect Attmpting...");
display.setOpaque(false);
//JTextArea加入文本显示面板
displayPanel.add(display);
//文本显示面板加至顶层容器
imPanel.add(displayPanel,BorderLayout.WEST);
//设置透明文本输入区面板
JPanel enterPanel=new JPanel();
enterPanel.setOpaque(false);
//文本输入标签
JLabel enterLab = new JLabel("Client Input:");
//设置透明可写的文本输入框
enter = new JTextField(20);
enter.setOpaque(false);
enter.setEnabled(true);
enter.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent e )
{//添加事件监听动作
}
}
);
enterPanel.add(enterLab);
enterPanel.add(enter);
//文本输入面板加至顶层容器
imPanel.add(enterPanel,BorderLayout.SOUTH);
//设置窗口为图片大小且不可调整
setSize(icon.getIconWidth(),icon.getIconHeight());
setResizable(false);
//设置窗口可见
setVisible(true);
}
public static void main( String args[] )
{
Client app = new Client();
app.addWindowListener(
new WindowAdapter() {
public void windowClosing( WindowEvent e )
{
System.exit( 0 );
}
}
);
}
}
三、总结
- 图片标签一定要加入到窗口的第二层面板,且把顶层面板设为透明。
- 输入框、文本域等小组件都要先放到一个透明JPanel下,然后再加入到顶层面板。
GUI是真的笨重…写过B/S后真的不想再碰C/S hhhh:)…