由于java中的背景图像无法看到我的按钮

由于java中的背景图像无法看到我的按钮,java,swing,Java,Swing,当我设置背景时,我无法看到我的按钮,直到我将光标移过它们。。 我试图为按钮设置不透明(true),但它不起作用 final JFrame f1=new JFrame("Front Main"); f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel p1=new JPanel(new GridBagLayout()){ private Image img = ImageIO.read(new File(

当我设置背景时,我无法看到我的按钮,直到我将光标移过它们。。 我试图为按钮设置不透明(true),但它不起作用

    final JFrame f1=new JFrame("Front Main");
    f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel p1=new JPanel(new GridBagLayout()){
    private Image img = ImageIO.read(new File("C:\\Users\\DELL\\Desktop\\football.jpg"));
    public void paint( Graphics g ) { 
           super.paintComponents(g);

           g.drawImage(img, 0,0,1366,730, null);
           }
    };
    GridBagConstraints g1= new GridBagConstraints();
    JButton b1=new JButton("Admin");
    JButton b2=new JButton("User");
    JLabel l1=new JLabel("Login as:");
    g1.insets=new Insets(3,3,0,0);
    g1.weightx=1;
    g1.ipadx=200;
    g1.anchor=GridBagConstraints.NORTH;
    g1.gridwidth=GridBagConstraints.RELATIVE;
    p1.add(b1,g1);
    g1.anchor=GridBagConstraints.NORTH;
    g1.gridwidth=GridBagConstraints.REMAINDER;
    p1.add(b2,g1);
    g1.weightx=3;
    g1.ipadx=0;
    p1.add(l1,g1);
    f1.add(p1);
    p1.setOpaque(false);
    f1.setSize(1366,730);
    f1.setVisible(true);

由于
JFrame
管理其内容的方式,覆盖其
paint
方法通常不是一个好主意。改用
JPanel

JPanel panel = new JPanel() {
    private Image img = ImageIO.read(new File("C:\\Users\\DELL\\Desktop\\football.jpg"));
    @Override
    public void paintComponent(Graphics g) { 
        super.paintComponent(g);

        g.drawImage(img, 0,0,1366,730, this);
    }

    etc...
};

final JFrame f1 = new JFrame("Front Main");
f1.add(panel);
f1.setSize(1366,730);
f1.setVisible(true);
f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
我无法看到我的按钮,直到我移动光标通过他们

这是因为要在框架可见后将组件添加到框架中

f1.setSize(1366,730);
f1.setVisible(true);
....
JButton b1=new JButton("Admin");
JButton b2=new JButton("User");
...
p1.add(b1,g1);
p1.add(b2,g1);
代码应该类似于:

....
JButton b1=new JButton("Admin");
JButton b2=new JButton("User");
...
p1.add(b1,g1);
p1.add(b2,g1);
...
f1.setSize(1366,730);
f1.setVisible(true);

此外,关于paint()方法的所有其他注释都是有效的。您不应该重写paint()方法。自定义绘制通过重写JPanel或JComponent的paintComponent()方法完成。然后将此组件添加到框架中。

无效果,使用super.paintComponent(g);哦,试试p1.setOpaque(false)。这需要透明,否则它会覆盖所有内容发布你的新SSCCE,其中包括所有建议,如在所有组件添加到框架后使用JPanel和调用setVisible()。我删除了旧代码,并在问题空间发布了新代码,根据你们提出的所有建议,我们已经告诉你们重写paintComponent()方法,而不是paint()方法。我不知道为什么要调用paintComponents()(请注意“s”)。您发布的代码没有编译或执行,因此我不打算详细查看它。好的,我知道了,现在它可以正常工作了。。谢谢您的帮助,但我没有得到它,为什么我重写paint()方法时它不起作用。你能解释一下或者给我发个链接,我可以在那里找到原因。。