【问题标题】:Add background image into applet frame将背景图像添加到小程序框架中
【发布时间】:2013-10-31 06:17:33
【问题描述】:

我正在尝试向我的小程序添加背景图像,但不知道如何添加。

这是我的代码。

public class SAMmain extends JApplet{    
    public JMenuBar mbar=new JMenuBar();    
    public JMenu newStudent,viewtudent,markAttendence;

    public void init() {
        setSize(1366, 768);
        setJMenuBar(mbar);
        newStudent= new JMenu("New Student  ");
        mbar.add(newStudent);
        viewtudent= new JMenu("View student");      
        mbar.add(viewtudent);
        markAttendence= new JMenu("Mark Attendence");
        mbar.add(markAttendence);
    }

    public void start() {
    }   
     public void stop() {
    }
}

【问题讨论】:

    标签: java image swing background-image japplet


    【解决方案1】:

    你可以使用paint函数

    public void paint(Graphics g) {
    
            ImageIcon i = new ImageIcon("path");
            g.drawImage(i.getImage(), x, y, this);
        }
    

    别忘了导入import javax.swing.ImageIcon;

    【讨论】:

    • 我应该复制src文件夹中的图像吗??
    • 既然你已经破坏了绘制链,那么小程序上的任何内容都不会正确绘制...
    • @M.ShamsTabrez 仅将您的图像复制到项目文件夹中。如果是 jpg 文件,则在路径中写入“yourimage.jpg”。
    • 1) paint 方法应该快速退出,不应该用于加载资源。 2) 使用ImageIcon 加载图像不会产生您可能会在ImageIO.read(..) 中看到的那种有用的错误消息 3) 任何对paint 方法的覆盖都应该调用super 方法。 - 好的 - 所以 3 条有问题的建议仅在 4 LOC 中。这还不错..它残暴! -1
    • 我是 java 的新手.....我已经将方法写入 init() 方法,但它没有工作
    【解决方案2】:

    根据您的需要,有多种方法可以实现...

    你可以...

    将内容窗格设为JLabel,并为其设置图标...

    public void init() {
        JLabel label = new JLabel(new ImageIcon(getClass().getResource("/path/to/resource")));
        setContentPane(label);
        setLayout(...);
        //...
    }
    

    你可以...

    例如使用Graphics API...

    public class BackgroundPane extends JPanel {
    
        private BufferedImage img;
    
        public BackgroundPane() {
            try {
                img = ImageIO.read(getClass().getResource("/path/to/resource"));
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    
        @Override
        public Dimension getPreferredSize() {
            return img == null ? new Dimension(200, 200) : new Dimension(img.getWidth(), img.getHeight());
        }
    
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (img != null) {
                Graphics2D g2d = (Graphics2D) g.create();
                g2d.drawImage(img, 0, 0, this);
                g2d.dispose();
            }
        }
    }
    

    然后您可以将其设置为小程序的内容窗格...

    public void init() {
        BackgroundPane background = new BackgroundPane();
        setContentPane(background);
        setLayout(...);
        //...
    }
    

    使用这样的东西的唯一真正原因是因为你想以某种特殊的方式处理图像,比如它的位置、大小、alpha 等......

    这一切都假设图像已被打包到应用程序的其中一个 Jar 中,并且在运行时可从类路径的上下文中获得...

    【讨论】:

      猜你喜欢
      • 2015-11-06
      • 2012-04-09
      • 2011-06-01
      • 2017-01-14
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多