0

It hasn't been long since I started developing Java.

This code was run by Eclipse. When I run this code javaSE-1.8, only mimage appears, and when I remove and run 'paintComponenets(g);',quit button and start button appear, and mimage disappears. I think 'paintComponents' is the problem. How do I solve this problem

    public class Mainscreen extends JFrame {
    private Image screenImage;
    private Graphics screenGraphics;
    private Image mImage = new 
ImageIcon(Main.class.getResource("../img/unnamed.jpg")).getImage();
    private ImageIcon quitEnter = new 
ImageIcon(Main.class.getResource("../img/startButtonBasic1.jpg"));
    private ImageIcon quitBasic = new 
ImageIcon(Main.class.getResource("../img/startButtonEntered1.jpg"));
    private ImageIcon startEnter = new 
ImageIcon(Main.class.getResource("../img/startButtonBasic.jpg"));
    private ImageIcon startBasic = new 
ImageIcon(Main.class.getResource("../img/startButtonEntered.jpg"));

private JButton quitButton = new JButton(quitBasic);
private JButton startButton = new JButton(startBasic);


public Mainscreen() {
        
    setTitle("Main");
    setSize(900, 900);
    setResizable(false);
    setLocationRelativeTo(null);
    setLayout(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    
    startButton.setBounds(40 ,200, 400, 100);
    startButton.setBorderPainted(false);
    startButton.setContentAreaFilled(false);
    startButton.setFocusPainted(false);
    
    startButton.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseEntered(MouseEvent e) {
            startButton.setIcon(startEnter);
            startButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
            
        }
        public void mouseExited(MouseEvent e) {
            startButton.setIcon(startBasic);
            startButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
            
        }
        public void MousePressed(MouseEvent e) {
            //select
        }
    });
    add(startButton);
    
    quitButton.setBounds(40, 500, 400, 100);
    quitButton.setBorderPainted(false);
    quitButton.setContentAreaFilled(false);
    quitButton.setFocusPainted(false);
    quitButton.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseEntered(MouseEvent e) {
            quitButton.setIcon(quitEnter);
            quitButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
            
        }
        public void mouseExited(MouseEvent e) {
            quitButton.setIcon(quitBasic);
            quitButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
            
        }
        public void MousePressed(MouseEvent e) {
            
            try {
                Thread.sleep(1000);
                
            }
            catch(InterruptedException ex){
                ex.printStackTrace();
            }
            System.exit(0);
        }
    });
    add(quitButton);
}

public void paint(Graphics g) {
    screenImage = createImage(Main.SCREEN_WIDTH, Main.SCREEN_HEIGHT);
    screenGraphics = screenImage.getGraphics();
    screenDraw(screenGraphics);
    
    g.drawImage(screenImage, 0, 0, null);
}

public void screenDraw(Graphics g) {
    g.drawImage(mImage, 0, 0, null);
    paintComponents(g);
    this.repaint();
}

}
Andrew Thompson
  • 163,965
  • 36
  • 203
  • 405
baegteun
  • 3
  • 2
  • 2
    You might be interested in https://stackoverflow.com/questions/9389187/difference-between-paint-paintcomponent-and-paintcomponents-in-swing – Jean-Baptiste Yunès Mar 25 '21 at 14:45
  • 2
    Not really sure what you are trying to do. Never invoke paintComponents(...). Don't invoke repaint() in a painting method. Don't override paint(). If you really need to do custom painting then you override paintComponent() on a JPanel. If you are trying to display an image then use a JLabel and display an ImageIcon. There is no need to do custom painting. – camickr Mar 25 '21 at 14:46

0 Answers0