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

时间:2013-02-27 15:03:51

标签: java swing

当我设置背景时,在我将光标移动到它们之前,我无法看到我的按钮。 我试图为按钮setOpaque(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);

2 个答案:

答案 0 :(得分:0)

由于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);

答案 1 :(得分:0)

  

在我将光标移过它们之前,我无法看到我的按钮

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

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()方法完成的。然后将此组件添加到框架中。