你好,在java中用paint画背景后,控件不显示,请问怎么改啊?

public class Testio extends JFrame{
/**
* @throws MalformedURLException
*/
public static void main(String[] args) throws MalformedURLException {
MyJPanel mj=new Testio().new MyJPanel();
JFrame jf=new JFrame("image");
jf.setContentPane(mj);
Container c=jf.getContentPane();
jf.setSize(1400, 800);
jf.setLocationRelativeTo(null);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
c.setLayout(null);
JTextField jl=new JTextField("HAVE A QUESTION");
c.add(jl);
}
class MyJPanel extends JPanel{
Image i;
public MyJPanel() throws MalformedURLException{
URL url=new URL("file:///D:/0.jpg");
i=Toolkit.getDefaultToolkit().getImage(url);
}
public void paint(Graphics g){
super.paint(g);
Graphics2D g2=(Graphics2D) g;
g2.drawImage(i, 0, -30,this);
}
}}

紫衣仙女
浏览 543回答 2
2回答

桃花长相依

做一个实例给你吧。这样做也可以的。import java.awt.*;import javax.swing.*;public class Test extends JFrame{JPanel jp=(JPanel)this.getContentPane();public Test(){jp.setLayout(null);JLabel jl=new JLabel("JLabel");JButton jb=new JButton("Button");jl.setBounds(new Rectangle(20,20,80,25));jb.setBounds(new Rectangle(20,60,80,25));jp.add(jl);jp.add(jb);}public static void main(String[] args) {Test frame=new Test();frame.setResizable(false);ImageIcon img = new ImageIcon("./images/backimage.jpg");//这是背景图片,注意这里是局部路劲在项目名下面的目录里,比如../项目名/images/...JLabel imgLabel = new JLabel();//将背景图放在标签里。imgLabel.setIcon(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());((JPanel)cp).setOpaque(false); //注意这里,将内容面板设为透明。这样LayeredPane面板中的背景才能显示出来。frame.setSize(1024,544);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}}

翻翻过去那场雪

JTextField jl=new JTextField("HAVE A QUESTION");jl.setLayout(null);jl.setBounds(0,0, 200, 30);c.add(jl);c.repaint();c是layout等于null。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java