Добавить фоновое изображение в рамку апплета

Я пытаюсь добавить фоновое изображение в свой апплет, но не знаю, как это сделать.

Вот мой код.

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() {
    }
}

person M.Shams Tabrez    schedule 31.10.2013    source источник


Ответы (2)


Вы можете использовать функцию paint

public void paint(Graphics g) {

        ImageIcon i = new ImageIcon("path");
        g.drawImage(i.getImage(), x, y, this);
    }

и не забудьте импортировать import javax.swing.ImageIcon;

person AJ.    schedule 31.10.2013
comment
я должен скопировать изображение в папку src ?? - person M.Shams Tabrez; 31.10.2013
comment
Теперь, когда вы разорвали цепочку отрисовки, в апплете ничего не будет правильно отрисовано... - person MadProgrammer; 31.10.2013
comment
@M.ShamsTabrez скопируйте свое изображение только в папку проекта. и в пути напишите «yourimage.jpg», если это файл jpg. - person AJ.; 31.10.2013
comment
1) Предполагается, что метод paint обеспечивает быстрый выход и не должен использоваться для загрузки ресурсов. 2) Загрузка изображения с помощью ImageIcon не приводит к появлению полезных сообщений об ошибках, которые вы могли бы увидеть с помощью ImageIO.read(..) 3) Любое переопределение метода рисования должно вызывать метод super. -- Хорошо, так что 3 сомнительных совета всего за 4 LOC. Это не плохо... это ужасно! -1 - person Andrew Thompson; 31.10.2013
comment
я новичок в java..... я написал матод в метод init(), но это не сработало - person M.Shams Tabrez; 31.10.2013
comment
вы должны написать этот метод paint() вне метода init() - person AJ.; 31.10.2013
comment
еще один момент, как я могу закрыть рамку с изображением?? - person M.Shams Tabrez; 31.10.2013
comment
для этого вам нужен jlabel. установите значок на jlabel, а затем добавьте его в рамку. - person AJ.; 31.10.2013

Есть несколько способов, которыми это может быть достигнуто в зависимости от того, что вы хотите...

Ты мог бы...

Сделайте панель содержимого 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(...);
    //...
}

Единственная реальная причина для использования чего-то подобного заключается в том, что вы хотите обработать изображение каким-то особым образом, например, его положение, размер, альфа и т. Д.

Все это предполагает, что изображение упаковано в один из JAR-файлов приложения и доступно во время выполнения из контекста пути к классу...

person MadProgrammer    schedule 31.10.2013