//这有效!
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);
答案 0 :(得分:2)
您将要遇到的明确问题将来自调用setBounds
方法。
致电您的面板setBackground
,然后通过调用JFrame
方法将其添加到add
。默认情况下,JPanel
会JFrame
添加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方法,但你还没有调用它们。