当我尝试从jframe创建扩展类时遇到问题。当我向创建的类中添加具有特定尺寸和位置的面板时,它将填充所有窗口。我的代码是:
package tuto;
import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class test extends JFrame{
public test(){
super();
initComponents();
}
private void initComponents() {
setBounds(0, 0, 1000, 618);
panel = new JPanel();
panel.setBounds(10, 10, 100, 100);
panel.setBackground(Color.blue);
add(panel);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new test().setVisible(true);
}
});
}
//Components
JPanel panel;
}
执行代码后,所有窗口变为蓝色。请帮忙。
答案 0 :(得分:0)
JFrame
默认情况下使用BorderLayout
,这就是为什么组件填充整个窗口的原因。有关更多详细信息,请参见How to Use BorderLayout。
实际上,我还建议您通读Laying Out Components Within a Container,以更好地了解布局管理系统的方式。
您应注意,在大多数情况下,通常不建议使用“手动”放置组件,而应使用一个或多个布局管理器。
作为一般建议,您还应避免从诸如JFrame
之类的顶级容器扩展,因为它将您视为单个用例,顶级容器往往很复杂,是复合组件,而您并不是通常向该类添加任何新功能。最好在需要时简单地创建它们,并用所需的组件填充它们。
答案 1 :(得分:0)
如果要使用绝对定位,则应将布局设置为null。
setLayout(null)
但是建议您看看不同的布局。一切都比空布局好。
例如https://docs.oracle.com/javase/tutorial/uiswing/layout/border.html