JPanel重写方法不起作用

时间:2014-08-22 21:48:57

标签: java swing background jframe jpanel

//这有效!

JPanel background = new JPanel();
background.setBackground(Color.BLACK);
background.setBounds(0,0,this.getSize().width,this.getSize().height);
add(background);`

//我的方法不起作用!为什么?经典方法setBackground(Color.BLACK);也有同样的问题

JPanel background = new JPanel()
{
    @Override
    public void setBackground(Color bg){
        super.setBackground(Color.BLACK);
    }
    @Override
    public void setBounds(int a, int b, int c, int d){
        super.setBounds(0,0,this.getSize().width,this.getSize().height);
    }
};
add(background);

2 个答案:

答案 0 :(得分:2)

您将要遇到的明确问题将来自调用setBounds方法。 致电您的面板setBackground,然后通过调用JFrame方法将其添加到add。默认情况下,JPanelJFrame添加JFrame,因为BorderLayout的默认布局为setBounds,并且无需调用import java.awt.Color; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class TestPanel { public static void main(String[] args) { SwingUtilities.invokeLater(() -> { JPanel panel = new JPanel(); panel.setBackground(Color.BLACK); JFrame frame = new JFrame(); frame.add(panel); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); //frame.pack(); frame.setSize(400, 300); frame.setVisible(true); }); } } 即可完美展开。绝对没有必要通过覆盖任何方法来使事情复杂化。

此:

{{1}}

...将完美运作。

答案 1 :(得分:0)

虽然你有ovverriden方法,但你还没有调用它们。