JButton () solo funciona cuando el mouse se desplaza

import java.awt.*; import java.awt.image.*; import java.awt.event.*; import javax.imageio.*; import java.lang.*; import java.io.*; import javax.swing.*; public class MainClass extends Component{ private Image bg; private ImageIcon newgame; private ImageIcon quit; private ImageIcon options; private JButton bquit; private JButton boptions; private JButton bnewgame; private static Container pane; //Container public void loadImage() { try { bg=ImageIO.read(new File("bg1.png")); } catch (Exception e) { } if(bg!=null) repaint(); } public void paint(Graphics g) { g.drawImage(bg,0,0,null); } public void imageButtons(JFrame f) { try { quit= new ImageIcon("quit.png"); options=new ImageIcon("options.png"); newgame= new ImageIcon("newgame.png"); }catch(Exception e){} bnewgame= new JButton(newgame); boptions= new JButton(options); bquit= new JButton(quit); bnewgame.setBounds(150,100,400,89); boptions.setBounds(150,200,400,89); bquit.setBounds(150,300,400,89); pane.add(bquit); pane.add(boptions); pane.add(bnewgame); } public static void main(String args[]) { MainClass o=new MainClass(); FullScreen fs=new FullScreen(); JFrame f1=new JFrame("TITLE"); pane=f1.getContentPane(); fs.fullScreenIt(f1); pane.add(o); f1.setVisible(true); o.loadImage(); o.imageButtons(f1); } } 

La pantalla completa es otra clase que ofrece un marco de pantalla completa. JButton tiene ImageIcon en ellos. bg1.png es una imagen de fondo. El problema es que estos JButton solo se vuelven visibles cuando el mouse se desplaza, de lo contrario no aparecen.

Es probable que tenga un problema de diseño en el que intente agregar JButtons con límites absolutos en un contenedor que utiliza un administrador de diseño no nulo. Sugerencias

  • No use setBounds y posicionamiento absoluto para dimensionar y colocar sus componentes.
  • Lea y use los administradores de diseño para hacer este trabajo pesado para usted: Lección: Presentación de componentes dentro de un contenedor
  • No olvide llamar a pack() en su JFrame después de agregar todos los componentes
  • Llame a setVisible(true) después de llamar a pack() y vuelva a llamar a ambos solo después de agregar todos los componentes a su GUI.
  • Un diseño nulo está disponible si es absolutamente necesario utilizar el posicionamiento absoluto de los componentes, pero independientemente, debe esforzarse por evitar su uso.

agregue Icon / ImageIcon directamente al JButton en lugar de paint() para AWT o paintComponent() para Swing JComponents

Contructor JButton (Icon) conoce Icon o ImageIcon

enter image description here

del código

 import java.awt.*; import javax.swing.*; public class ButtonsIcon extends JFrame { private static final long serialVersionUID = 1L; private ImageIcon errorIcon = (ImageIcon) UIManager.getIcon("OptionPane.errorIcon"); private Icon infoIcon = UIManager.getIcon("OptionPane.informationIcon"); private Icon warnIcon = UIManager.getIcon("OptionPane.warningIcon"); public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { ButtonsIcon t = new ButtonsIcon(); } }); } public ButtonsIcon() { setLayout(new GridLayout(0, 2, 4, 4)); JButton button = new JButton(); button.setBorderPainted(false); button.setBorder(null); button.setFocusable(false); button.setMargin(new Insets(0, 0, 0, 0)); button.setContentAreaFilled(false); button.setIcon((errorIcon)); button.setRolloverIcon((infoIcon)); button.setPressedIcon(warnIcon); button.setDisabledIcon(warnIcon); add(button); JButton button1 = new JButton(); button1.setBorderPainted(false); button1.setBorder(null); button1.setFocusable(false); button1.setMargin(new Insets(0, 0, 0, 0)); button1.setContentAreaFilled(false); button1.setIcon((errorIcon)); button1.setRolloverIcon((infoIcon)); button1.setPressedIcon(warnIcon); button1.setDisabledIcon(warnIcon); add(button1); button1.setEnabled(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); } } 

Parece que nunca volverás a pintar después de agregar tus botones.

Agregaría una pintura allí después de agregarlos.

Solo tuve un problema similar …

Creo que el problema se debe a que anula el método paint (). El método predeterminado paint () llama automáticamente a repintado () en todos los componentes, pero anulando el método paint (), los componentes dejan de repintarse. Entonces, la solución es llamar a repaint () en todos los componentes en el método overriden paint ().

Trabajó para mí, espero que funcione para otros;) ..