给JFrame指定布局(setLayout)失败的问题有人见过么 我在构造方法里写了 setLayout(new GridBagLayout()), 但是运行后还是BorderLayout,怎么办? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接设置contentPane吧。把组件都加到panel里面。 api中有说明:JFrame 类与 Frame 轻微不兼容。与其他所有 JFC/Swing 顶层容器一样,JFrame 包含一个 JRootPane 作为其唯一的子容器。根据规定,根窗格所提供的内容窗格应该包含 JFrame 所显示的所有非菜单组件。这不同于 AWT Frame。为了方便地使用 add 及其变体,已经重写了 remove 和 setLayout,以在必要时将其转发到 contentPane。测试:import java.awt.GridLayout;import java.awt.LayoutManager;import javax.swing.JFrame;public class Main{ public static void main(String[] args) { JFrame frame = new JFrame("Test"); frame.setLayout(new GridLayout(3,3)); LayoutManager manager = frame.getLayout(); System.out.println(manager); manager = frame.getContentPane().getLayout(); System.out.println(manager); }}看得出设置之后contentPane的布局管理器改了。 http://java.sun.com/docs/books/tutorial/uiswing/layout/gridbag.html 新手应该多看API,那样才能进步 哦,就是说不能直接往JFrame里加组件,要往ContentPane里加? 最近在看AWT的书(看布局管理器),忘了这回事了... 也可以直接往JFrame里加,因为API里说:根据规定,根窗格所提供的内容窗格应该包含 JFrame 所显示的所有非菜单组件。这不同于 AWT Frame。为了方便地使用 add 及其变体,已经重写了 remove 和 setLayout,以在必要时将其转发到 contentPane。这意味着可以编写: frame.add(child); 子级将被添加到 contentPane 再看一下你的程序是不是写错了,api里讲的清楚,表格布局有些设置是根据行列参数的具体情况自动变的。 frame.getContentPane().setLayout();frame.getContentPane().add(child); 你如果用frame.setLayout(new GridBagLayout());是会出现问题的,因为你默认给frame布局了,而并没有给frame.getContentPane()得到的Container布局,你所有的控件都是放在frame.getContentPane()上面的,所以就会出现你所说的成为了BorderLayout布局了. myeclipse 7.5安装问题 已知一个数组中有n个字母,想输出这n个字母的全排列 像博客那样自由的设置页面模块的显示样式,怎么实现呢? 全分送 解决问题后马上散分 关于发布的问题!在线等 关于图片显示的问题 java处理文本文件 一个简单问题 this 在这里表示什么意思? 怎样画一个带箭头的线条,然后这个线条能响应鼠标事件? 请问如何遍历一个二维数组的所有组合? java 性能问题 swing 中哪个类可以显示从数据库中查询的二维表
把组件都加到panel里面。
JFrame 类与 Frame 轻微不兼容。与其他所有 JFC/Swing 顶层容器一样,JFrame 包含一个 JRootPane 作为其唯一的子容器。根据规定,根窗格所提供的内容窗格应该包含 JFrame 所显示的所有非菜单组件。这不同于 AWT Frame。为了方便地使用 add 及其变体,已经重写了 remove 和
setLayout,以在必要时将其转发到 contentPane。测试:
import java.awt.GridLayout;
import java.awt.LayoutManager;
import javax.swing.JFrame;public class Main{
public static void main(String[] args) {
JFrame frame = new JFrame("Test");
frame.setLayout(new GridLayout(3,3));
LayoutManager manager = frame.getLayout();
System.out.println(manager);
manager = frame.getContentPane().getLayout();
System.out.println(manager);
}
}看得出设置之后contentPane的布局管理器改了。
最近在看AWT的书(看布局管理器),忘了这回事了...
根据规定,根窗格所提供的内容窗格应该包含 JFrame 所显示的所有非菜单组件。这不同于 AWT Frame。为了方便地使用 add 及其变体,已经重写了 remove 和 setLayout,以在必要时将其转发到 contentPane。这意味着可以编写: frame.add(child);
子级将被添加到 contentPane
frame.getContentPane().add(child);