为什么更改java.awt.Canvas的背景颜色会改变整个画面的背景?
我按如下方式设置了一个Frame对象:
public class Gui extends Frame {
public Gui() {
setSize(800, 600);
setLocation(0, 0);
Canvas cd=new Canvas();
cd.setSize(500, 300);
cd.setBackground(Color.BLUE);
add(cd);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent arg0) {
System.exit(0);
}
});
}
@Override
public void paint(Graphics g) {
paintComponents(g);
}
public static void main(String[] args) {
Gui g=new Gui();
g.setVisible(true);
}
}
上面的代码将帧大小设置为800x600,然后添加一个明显更小的画布 - 500x300,最后将背景颜色设置为Color.BLUE
,而不是在更大的内部获得500x300的蓝色矩形,800x600窗框(默认为灰色),结果是800x600的蓝色背景框架:
文档说:
public void setBackground(Color c)
设置此组件的背景颜色。
背景颜色会不同地影响每个组件和部件 受背景颜色影响的组件可能会有所不同 在操作系统之间。
这可能是问题(我在Ubuntu上运行这个)? 或者我在这里错过了其他什么?
答案 0 :(得分:1)
Frame
的默认布局是BorderLayout
(尽管使用基于AWT的Frame
类的大量示例代码是在默认布局为{{1 }})。如果没有布局约束,添加到FlowLayout
的组件将以BorderLayout
约束结束,该约束会拉伸组件,使其适合可用的高度和宽度。
相反,我们可能会使用CENTER
。当我们将一个组件添加到GridBagLayout
而没有任何约束时,它将居中并且大小将被尊重。例如。 (参见代码中的进一步评论。)
GridBagLayout