setlayout 订阅
setLayout是java图形界面编程的常用方法,用来设置用户界面上的屏幕组件的格式布局,默认为流式布局。常用的有5种:FlowLayout、BorderLayout、GridLayout、CardLayout、GridBagLayout。 展开全文
setLayout是java图形界面编程的常用方法,用来设置用户界面上的屏幕组件的格式布局,默认为流式布局。常用的有5种:FlowLayout、BorderLayout、GridLayout、CardLayout、GridBagLayout。
信息
外文名
setLayout
格式
public void setLayout
例    子
setLayout(new FlowLayout
一般的用法
setLayout
Robot Framework简介
函数声明格式:public void setLayout(LayoutManager manager)一般的用法:setLayout(new BorderLayout())//或FlowLayout...随后调用add(...)即可。常用的有5种:FlowLayout、BorderLayout、GridLayout、CardLayout、GridBagLayout。一般来说都要放在构造函数或初始化函数中,设置后再加入控件。下面是几个使用setLayout()方法实现FlowLayout的例子:setLayout(new FlowLayout(FlowLayout.RIGHT,20,40));setLayout(new FlowLayout(FlowLayout.LEFT));setLayout(new FlowLayout());
收起全文
精华内容
下载资源
问答
  • setlayout
    千次阅读
    2019-06-15 19:14:26

    setLayout是对当前组件设置为流式布局.组件在窗体中从左到右依次排列 如果排到行的末尾 换行排列 排列会随着窗体的大小而改变

    JPanel的默认布局是流式布局,JFrame的默认布局是BorderLayout边框布局.

    与此之外还可以设置为GridLayout网格布局跟CardLayout卡片布局

    常见的构建函数和方法

    构造方法摘要

    BorderLayout(): 构造一个组件之间没有间距(默认间距为0像素)的新边框布局。

    BorderLayout(int hgap, int vgap) : 构造一个具有指定组件(hgap为横向间距,vgap为纵向间距)间距的边框布局。

    方法摘要

    int

    getHgap() : 返回组件之间的水平间距。

    int

    getVgap() : 返回组件之间的垂直间距。

    void

    removeLayoutComponent(Component comp): 从此边框布局中移除指定组件。

    void

    setHgap(int hgap): 设置组件之间的水平间距。

    void

    setVgap(int vgap) : 设置组件之间的垂直间距。


    作者:好名字占了
    来源:CSDN
    原文:https://blog.csdn.net/liujun13579/article/details/7772215
    版权声明:本文为博主原创文章,转载请附上博文链接!

    更多相关内容
  • Qt之布局设置setLayout详解(上)

    千次阅读 2022-03-16 17:02:16
    效果图1: 1.1 Qt助手中setLayout方法介绍 图2: 从上图2中,我们看到Qt文档对于setLayout方法的解说,具体作用就是给某个部件设置布局管理器。 1.11 文档中需要注意的两点 如果当前部件已经设置过布局,当你再次...

    一、简述

    大家好,我是前行中的小猪,今天给大家讲解的是布局的相关用法分析以及如何对控件进行重布局,先从助手文档带大家了解一下用法,然后再通过类似视频监控分屏切换的示例给大家简单分析一下,在一个控件中通过菜单切换实现不同的布局。

    一般视频监控这种场景会连接多颗摄像头去进行监控,这个时候就需要多屏操作,一般情况会连接多个显示器,但是奈何像学校,商场,小区需要几十上百个摄像头进行对整片区域的监控,这不是靠几个屏幕能看的过来的,这个时候就需要进行分区显示,比如一个屏幕显示单个、4个、6个、9个、16个、21个、32等等,无疑是希望在几块屏幕上能够看到更多区域的视频,同时可以进行切换,方便管理。

    我们先看一下效果。

    效果图1:

    在这里插入图片描述


    1.1 Qt助手中setLayout方法介绍

    图2:

    在这里插入图片描述
    从上图2中,我们看到Qt文档对于setLayout方法的解说,具体作用就是给某个部件设置布局管理器。


    1.11 文档中需要注意的两点

    1. 如果当前部件已经设置过布局,当你再次对此部件设置新的布局是不会生效的,你必须先删除之前已经设置的布局,新布局才会生效。
    2. 如果当前布局已经设置给了控件A,那么控件B对此布局再调用setLayout方法,将会把控件A的布局重新设置给控件B。

    我们先来看看第一点,结合下方的测试代码,如果widget已经设置了hLayout1布局,如果再设置hLayout2布局,最终结果是hLayout1生效hLayout2不生效,并且运行到这段代码的时候编译器会有错误提示,告诉你当前部件已经配置一个布局了,人家这是一夫一妻制,多了就不合法了。

    QWidget* widget = new QWidget;
    
    QHBoxLayout* hLayout1 = new QHBoxLayout;
    widget->setLayout(hLayout1);
    
    QHBoxLayout* hLayout2 = new QHBoxLayout;
    widget->setLayout(hLayout2);
    

    QWidget::setLayout: Attempting to set QLayout “” on QWidget “”, which already has a layout

    ====================================================
    我们再来看看第二点,继续结合下方的测试代码,大家快速过一遍,然后翻到下方的效果图。

    m_contentLabel = new QLabel("我是测试控件");
    m_contentLabel->setAlignment(Qt::AlignCenter);
    
    m_leftWgt = new QWidget;
    m_leftWgt->setStyleSheet(".QWidget{background:red;}");
    
    QHBoxLayout* hLayout = new QHBoxLayout(m_leftWgt);
    hLayout->addWidget(m_contentLabel);
    hLayout->setMargin(0);
    
    m_rightWgt = new QWidget;
    m_rightWgt->setStyleSheet(".QWidget{background:yellow;}");
    
    m_pBtnSwitch = new QToolButton;
    m_pBtnSwitch->setText("切换布局");
    
    QGridLayout* gLayout = new QGridLayout(this);
    gLayout->addWidget(m_leftWgt, 0, 0);
    gLayout->addWidget(m_rightWgt, 0, 1);
    gLayout->addWidget(m_pBtnSwitch, 1, 0);
    
    connect(m_pBtnSwitch, &QToolButton::clicked, this, [=] {
    	QLayout* layout = m_leftWgt->layout();
    	m_rightWgt->setLayout(layout);
    });
    

    上方的代码中,我们定义了左右两个widget,我们将布局先设置给了左边的widget,在按钮的槽函数中我们将此布局再传递给右边的控件,从下方的效果图中我们看到布局(及布局上添加的部件)是可以成功地从控件A转移到控件B上,但前提是控件B没有设置过布局

    这就好比,控件A在生活中对布局对象不好,那行吧,两个人过不下去,那就离吧,然后布局遇到了控件B,觉得控件B人不错,就决定嫁给控件B,但是要想合法,那么控件B不能存在婚姻关系(也就是说控件B没有设置过布局),所以布局对象就可以名正言顺地带着他所拥有的一切转移给控件B,不知道这个比喻大家还能理解O(∩_∩)O。

    效果图3:

    在这里插入图片描述


    1.12 给部件设置布局的两种方式:

    方式一:主动式

    给部件对象直接调用setLayout方法指定布局(文档中给出了示例)

    QWidget* parentWidget = new QWidget;
    
    QPushButton* pBtn = new QPushButton;
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(QPushButton);
    parentWidget->setLayout(layout);
    

    方式二:被动式

    直接将需要设置布局的控件对象放到布局对象的构造中(文档中最后一句话给了提示,通常我也喜欢用这种方式,毕竟省了一行代码O(∩_∩)O)

    QWidget* parentWidget = new QWidget;
    
    QPushButton* pBtn = new QPushButton;
    QVBoxLayout *layout = new QVBoxLayout(parentWidget);
    layout->addWidget(QPushButton);
    

    1.13 - - 问题来了- -

    如果我们给控件设置了布局,那如何清空某个控件的布局呢?

    方法一:

    既然我们可以使用setLayout方法设置布局,能不能用它清空布局呢,我们来传个空指针可以不?

    答案是不可以,这里假设m_leftWgt已经设置过布局,这里我们给他传个空指针,调用完之后,实际上之前的布局依然存在,并且编译器再次给出提示 QWidget::setLayout: Cannot set layout to 0,就是你不能给他传个空指针。

    m_leftWgt->setLayout(nullptr);
    QLayout* layout = m_leftWgt->layout();
    if (layout != nullptr){
    	int count = layout->count();
    	qDebug() << count;
    	qDebug() << "布局仍然存在";
    }
    else{
    	qDebug() << "布局已经删除";
    }
    
    // 结果: 布局仍然存在
    

    QWidget::setLayout: Cannot set layout to 0


    方法二:

    这里我们假设m_leftWgt已经设置过布局。
    这种方法就强势一点,直接获取当前控件的布局对象,然后直接删除为了严谨一点,这里还是要判断下指针是否为空),通过测试,这种方法是可以成功的。

    QLayout* layout = m_leftWgt->layout();
    if (layout != nullptr)
    	delete layout;
    
    layout = m_leftWgt->layout();
    if (layout != nullptr){
    	int count = layout->count();
    	qDebug() << count;
    	qDebug() << "布局仍然存在";
    }
    else{
    	qDebug() << "布局已经删除";
    }
    
    // 结果: 布局已经删除
    

    通过这种方法,布局虽然删除了,但是布局上的添加的子控件依然认为m_leftWgt控件为父控件,也就是我们给布局添加的子控件依然依附于m_leftWgt控件,那么怎么完全删除布局及布局上所添加的所有子控件呢?具体解决方案将在下一篇博文中再详细讲解。

    效果图4:

    在这里插入图片描述


    二、尾

    本篇文章详细讲解了setLayout的一些相关用法,通过助手中给出的文档说明,带着大家进行了一些拓展分析,下篇文章将继续带着大家分析遗留的问题以及给大家带来视频监控分屏切换的示例代码,欢迎一起交流讨论,如果对文章中提及的点有疑问或者发现有错误的地方欢迎指出,也十分欢迎感兴趣的小伙伴一起交流。


    Qt训练营快要开营了,欢迎大家加入,有兴趣的小伙伴可以加群 861353824 了解详情。


    内容分享整理不易,喜欢的小伙伴帮忙点个赞和收藏,谢谢!

    展开全文
  • 大家好,我是前行中的小猪,今天呢给大家继续上一篇Qt之布局设置setLayout详解(上)之后的内容,再给大家进行一下拓展。 1.1 setLayout源码剖析 上篇我们说到如何清空部件上的布局(不记得的小伙伴回到上篇回顾一下...

    一、简述

    大家好,我是前行中的小猪,今天呢给大家继续上一篇Qt之布局设置setLayout详解(上)之后的内容,再给大家进行一下拓展。

    1.1 setLayout源码剖析

    上篇我们说到如何清空部件上的布局(不记得的小伙伴回到上篇回顾一下),一开始我们还是想使用setLayout方法,传递一个空指针,来将当前控件的布局清空,谁知人家不让你设置空指针,我们不如呢直接来看下源码中对于setLayout方法到底是做了什么操作。

    下图中针对setLayout方法,每小段代码给出了说明,大家可以看着图中的代码及说明,遇到问题呀还是得看他源码中怎么实现的,这不给出了答案,其中的规则及操作尽收眼底。

    对于setLayout方法,简单来说注意以下几点:

    1、参数不能传递空指针
    2、不能重复设置布局(要先删除,再设置)
    3、布局可以从控件A转移到控件B(前提控件B没有设置过布局)
    4、内嵌的布局(布局A被布局B包含,A就是内嵌在B中)不能被转移

    效果图1:

    在这里插入图片描述


    到这里我们对帮助文档中给出的说明文档是不是有了更好的理解(如果没有那就把这两篇文章再看几遍O(∩_∩)O~),所以我建议大家遇到问题,第一先看帮助文档中对接口提供的描述(Qt的文档还是做得很好的),第二再去扒一下源码,看看源码里面到底做了什么,可以很好地方便我们去理解,也容易去避免一些坑。

    图2:

    在这里插入图片描述


    1.2 控件如何清空之前设置的布局及布局中的控件

    上篇文章中我们提到怎么去删除当前控件A上的布局,获取到布局对象,然后进行delete操作,将其删除。

    QLayout* layout = m_leftWgt->layout();
    if (layout != nullptr)
    	delete layout;
    

    但是仍然遗留一个问题,就是布局上的子控件依然存在于控件A上。那怎么能够完完全全清空一个控件上所有的布局以及子控件呢?

    我们先看下QLayout::addWidget方法的源码,先是调用了addChildWidget(访问权限:protected),然后创建一个QLayoutItem对象来绑定添加进来的的控件控件A, 然后再调用addItem(纯虚函数,根据不同类型布局的,具体操作不同),将新创建的LayoutItem对象添加到布局中。

    图3:

    在这里插入图片描述

    我们再来看下addChildWidget方法中做了什么操作,看到红框圈起来的几个部分代码,实际上就是将添加的childWidget控件作为布局绑定的parentWidget控件的子控件。

    图4:

    在这里插入图片描述

    直白点就是其实添加到布局中的子控件跟布局本身没有关系,两者之间是需要通过QLayoutItem对象来进行绑定,具体怎么布局就看不同类型的Layout中对addItem是怎么实现的,然后再指定添加的childWidget控件与parentWidget控件的父子关系,所以我们删除了parentWidget控件的布局,但是childWidget控件还是显示在parentWidget控件上,因为父子关系还在,那问题就简单了,解除父子关系即可。

    下方代码中我们获取到当前对象的布局,然后获取当前布局中所有的QLayoutItem对象,可以通过此对象的widget方法获取到子控件对象,然后将子对象的父子关系解除即可< setParent(nullptr) >。

    	QLayout* layout = this->layout();
    	if (layout != nullptr){
    		QLayoutItem *childItem;
    		while ((childItem = layout->takeAt(0)) != 0) {
    			QWidget* itemWidget = childItem->widget();
    			// 这里需要判断是否为空,因为layoutItem还可分为spaceItem和widgetItem,同时布局本身也是个layoutItem;
    			// 同时布局中不一定都是widgetItem,可能是个嵌入的布局item,可能是个spaceItem;
    			if (itemWidget != nullptr) {
    				// 这里可以理解为将布局中的子控件脱离父控件;
    				itemWidget->setParent(nullptr);
    			}
    			delete childItem;
    		}
    
    		delete layout;
    	}
    

    1.3 关于removeItem 和 removeWidget 方法

    我们从图5和图6中看到,实际上两者所达到的效果一致,都只是解除子控件和布局之间的关联者QLayoutItem,但是两者不同的是,removeItem并没有自动删除item,需要手动删除,而removeWidget 方法中主动删除了widget对应的layoutItem。这个需要大家多加注意。

    图5:

    在这里插入图片描述

    图6:

    在这里插入图片描述


    二、代码之路

    下面就是通过菜单切换不同分屏的示例代码,有需要的小伙伴可以瞅瞅。

    效果图:

    在这里插入图片描述

    VideoSwitchWidget.h

    
    #include <QtWidgets/QWidget>
    #include <QLabel>
    #include <QMenu>
    
    // 视频分屏类型;
    enum VideoLayoutType
    {
    	OneVideo_Type = 0,
    	FourVideo_Type,
    	SixVideo_Type,
    	NineVideo_Type,
    };
    
    class VideoSwitchWidget : public QWidget
    {
        Q_OBJECT
    
    public:
        VideoSwitchWidget(QWidget *parent = Q_NULLPTR);
    
    private:
    	void initWidget();
    	void initMenu();
    
    	// 菜单事件;
    	void contextMenuEvent(QContextMenuEvent* event);
    
    private:
    	// 切换不同布局;
    	void switchLayout(VideoLayoutType type);
    
    private:
    	// 保存视频区域;
    	QList<QLabel*> m_videoLabelList;
    	QMenu* m_switchMenu;
    };
    

    VideoSwitchWidget.cpp

    #include "VideoSwitchWidget.h"
    #include <QGridLayout>
    #include <QContextMenuEvent>
    #include <QDebug>
    
    #pragma execution_character_set("utf-8")
    
    VideoSwitchWidget::VideoSwitchWidget(QWidget *parent)
        : QWidget(parent)
    {
    	initWidget();
    	this->resize(QSize(800, 500));
    	this->setContextMenuPolicy(Qt::DefaultContextMenu);
    }
    
    void VideoSwitchWidget::initWidget()
    {
    	initMenu();
    
    	for (int i = 0; i < 9; i ++)
    	{
    		QLabel* label = new QLabel;
    		label->setAlignment(Qt::AlignCenter);
    		label->setText(QString("未加载视频%1").arg(i + 1));
    		label->setStyleSheet("QLabel{background:white;font-size:30px;color:gray;font-weight:bold;border:1px solid gray;}");
    		m_videoLabelList.append(label);
    	}
    
    	switchLayout(VideoLayoutType::OneVideo_Type);
    }
    
    void VideoSwitchWidget::initMenu()
    {
    	m_switchMenu = new QMenu(this);
    	m_switchMenu->addAction("一分屏");
    	m_switchMenu->addAction("四分屏");
    	m_switchMenu->addAction("六分屏");
    	m_switchMenu->addAction("九分屏");
    
    	QMap<QString, int> strTypeMap;
    	strTypeMap["一分屏"] = VideoLayoutType::OneVideo_Type;
    	strTypeMap["四分屏"] = VideoLayoutType::FourVideo_Type;
    	strTypeMap["六分屏"] = VideoLayoutType::SixVideo_Type;
    	strTypeMap["九分屏"] = VideoLayoutType::NineVideo_Type;
    
    	connect(m_switchMenu, &QMenu::triggered, this, [=](QAction *action) {
    		QString strText = action->text();
    		VideoLayoutType type = VideoLayoutType(strTypeMap[strText]);
    		switchLayout(type);
    	});
    }
    
    void VideoSwitchWidget::contextMenuEvent(QContextMenuEvent* event)
    {
    	m_switchMenu->exec(QCursor::pos());
    }
    
    void VideoSwitchWidget::switchLayout(VideoLayoutType type)
    {
    	QLayout* layout = this->layout();
    	if (layout != nullptr)
    	{
    		// 这一步操作可以理解为直接layout就直接删除所有的item;
    		for (int i = 0; i < layout->count(); i++)
    		{
    			QLayoutItem* layoutItem = layout->itemAt(i);
    			// 如果后面直接删除布局,这句可省略;
    			layout->removeItem(layoutItem);
    
    			// 这里可以理解为将布局中的控件脱离父控件;
    			QWidget* itemWidget = layoutItem->widget();
    			// 这里需要判断是否为空,因为layoutItem还可分为spaceItem和widgetItem,同时布局本身也是个layoutItem;
    			// 同时布局中不一定都是widgetItem,可能是个嵌入的布局item,可能是个spaceItem;
    			if (itemWidget != nullptr)
    			{
    				itemWidget->setParent(nullptr);
    			}
    		}
    
    		delete layout;
    	}
    
    	switch (type)
    	{
    	case OneVideo_Type:
    	{
    		QGridLayout* gLayout = new QGridLayout(this);
    		gLayout->addWidget(m_videoLabelList[0]);
    		gLayout->setMargin(0);
    	}
    	break;
    	case FourVideo_Type:
    	{
    		QGridLayout* gLayout = new QGridLayout(this);
    		gLayout->setSpacing(0);
    		gLayout->setMargin(0);
    
    		for (int i = 0; i < 4; i++)
    		{
    			gLayout->addWidget(m_videoLabelList[i], i / 2, i % 2);
    		}
    	}
    	break;
    	case SixVideo_Type:
    	{
    		QGridLayout* gLayout = new QGridLayout(this);
    		gLayout->addWidget(m_videoLabelList[0], 0, 0, 2, 2);
    		gLayout->addWidget(m_videoLabelList[1], 0, 2);
    		gLayout->addWidget(m_videoLabelList[2], 1, 2);
    		gLayout->addWidget(m_videoLabelList[3], 2, 0);
    		gLayout->addWidget(m_videoLabelList[4], 2, 1);
    		gLayout->addWidget(m_videoLabelList[5], 2, 2);
    		gLayout->setSpacing(0);
    		gLayout->setMargin(0);
    	}
    	break;
    	case NineVideo_Type:
    	{
    		QGridLayout* gLayout = new QGridLayout(this);
    		gLayout->setSpacing(0);
    		gLayout->setMargin(0);
    
    		for (int i = 0; i < 9; i++)
    		{
    			gLayout->addWidget(m_videoLabelList[i], i / 3, i % 3);
    		}
    	}
    		break;
     	default:
    		break;
    	}
    }
    

    三、尾

    本篇文章继上篇文章通过源码的分析继续讲解了setLayout的一些相关用法及注意要点,这次通过实际源码,又带着大家进行了拓展分析,其实我们在解决问题的时候,Qt的帮助文档和源码可以拿来看一看,说不定解决方案就在这文档提及的一段话或者源码中一丝逻辑,都会有很大的帮助,通过写这两篇文章,我也再次对布局的用法上有了新的认识,后面还会再抽时间对布局系统的进行整理。如果对文章中提及的点有疑问或者发现有错误的地方欢迎指出,也十分欢迎感兴趣的小伙伴一起交流。

    Qt训练营快要开营了,欢迎大家加入,有兴趣的小伙伴可以加群 861353824 了解详情。

    内容分享整理不易,喜欢的小伙伴帮忙点个赞和收藏,谢谢!

    展开全文
  • contentPane.setLayout(new FlowLayout()); contentPane.add(new JButton("first")); contentPane.add(new JButton("second")); contentPane.add(new JButton("third")); contentPane.add(new JButton("fourth")); ...

    1。FlowLayout

    public FlowLayout(int align,int hgap,int vgap)

    创建一个新的流布局管理器,具有指定的对齐方式以及指定的水平和垂直间隙。

    对齐参数的值必须是以下之一:FlowLayout.LEFT、FlowLayout.RIGHT、FlowLayout.CENTER、FlowLayout.LEADING 或 FlowLayout.TRAILING。

    参数:

    align - 对齐值

    hgap - 组件之间以及组件与 Container 的边之间的水平间隙

    vgap - 组件之间以及组件与 Container 的边之间的垂直间隙

    import java.awt.Container;

    import java.awt.FlowLayout;

    import java.awt.event.WindowAdapter;

    import java.awt.event.WindowEvent;

    import javax.swing.JButton;

    import javax.swing.JFrame;

    /*

    FlowLayout()建立一个新的Flow Layout,此FlowLayout默认值是居中对齐,组件彼此有5单位的水平与垂直间距。

    FlowLayout(int align)建立一个新的Flow Layout,此FlowLayout可设置排列方式,组件彼此有5单位的水平与垂直 间距。

    FlowLayout(int align,int hgap,int vgap)建立一个新的Flow Layout,此FlowLayout可设置排列方式与组件间距。

    */

    public class FlowLayoutDemo{

    public FlowLayoutDemo(){

    JFrame f=new JFrame();

    /*你可以使用有间距的FlowLayout构造函数,使FlowLayout的排列具有间距,并

    *并可利用排列方向参数来指定靠什么方向排列,FlowLayout共有五种排列方式,

    *依次是CENTER(默认值),LEFT,RIGHT,LEADING,TRAILING,若我们将下面程序第13

    *行改成contentPane.setLayout(new FlowLayout(FlowLayout.LEFT));

    */

    Container contentPane=f.getContentPane();

    contentPane.setLayout(new FlowLayout());

    contentPane.add(new JButton("first"));

    contentPane.add(new JButton("second"));

    contentPane.add(new JButton("third"));

    contentPane.add(new JButton("fourth"));

    contentPane.add(new JButton("fifth"));

    contentPane.add(new JButton("Last"));

    f.setTitle("FlowLayout");

    //f.pack();//必须将f.pach()去掉,否则setSize功能将没有作用

    f.setSize(400,220);

    f.setVisible(true);

    f.addWindowListener(

    new WindowAdapter(){

    public void windowClosing(WindowEvent e){

    System.exit(0);

    }

    }

    );

    }

    public static void main(String[] args){

    FlowLayoutDemo b=new FlowLayoutDemo();

    }

    }

    2GridLayout

    public GridLayout(int rows,

    int cols,

    int hgap,

    int vgap)创建具有指定行数和列数的网格布局。给布局中的所有组件分配相等的大小。

    此外,将水平和垂直间距设置为指定值。水平间距将置于列与列之间。将垂直间距将置于行与行之间。

    rows 和 cols 中的一个可以为零(但不能两者同时为零),这表示可以将任何数目的对象置于行或列中。

    所有 GridLayout 构造方法都服从这一规定。

    参数:

    rows - 该 rows 具有表示任意行数的值零

    cols - 该 cols 具有表示任意列数的值零

    hgap - 水平间距

    vgap - 垂直间距

    3,BorderLayout

    public BorderLayout(int hgap,

    int vgap)用指定的组件之间的水平间距构造一个边界布局。水平间距由 hgap 指定,而垂直间距由 vgap 指定。

    参数:

    hgap - 水平间距。

    vgap - 垂直间距。

    4,CardLayout

    public CardLayout(int hgap,

    int vgap)创建一个具有指定的水平和垂直间隙的新卡片布局。水平间隙置于左右边缘。垂直间隙置于上下边缘。

    参数: hgap - 水平间隙。 vgap - 垂直间隙。

    展开全文
  • 我快速查看了the BoxLayout source code并看到我使用的构造函数(第178-185行)没有调用target.setLayout(this)或任何类型的东西.看起来添加它真的很简单.有没有理由为什么它不包含在Swing库中? 如果重要,我正在使用...
  • Java | JFrame中setLayout的意思

    千次阅读 2021-11-21 13:46:39
    setLayout是对当前组件设置为流式布局 组件在窗体中从左到右依次排列 如果排到行的末尾,换行排列 排列会随着窗体的大小而改变 JPanel的默认布局是流式布局,JFrame的默认布局是BorderLayout边框布局. 与此之外...
  • } } 这个程序为什么 JButton 消失了 不要说把jpn.setLayout(null)去掉啊 要是能去掉我就不问了 如果把里面的 jf.add(jpn,BorderLayout.NORTH); 改成jf.add(jpn,BorderLayout.CENTER); 就可以了 为什么?在线等。 ...
  • /*009*/ //f.setLayout(null); /*010*/ Button b1=new Button("Click Me"); /*011*/ Button b2=new Button("No"); /*012*/ f.add(b1); /*013*/ f.add(b2); /*014*/ b1.setLocation(100,100); /*015*/ b1.setSize(50...
  • java中的setLayOut(null)
  • QT中setLayout无效的问题

    千次阅读 2020-08-26 20:00:42
    当我们自己创建了一个Layout对象以后,使用QWidget的setLayout方法,将这个Layout对象应用到窗口中的时候,发现窗口上没有我们添加的控件。 比如,QMainWindow就是一个例子,还有QToolBar也是这样,还有其他的QT...
  • java中setLayout()方法

    万次阅读 多人点赞 2020-05-31 08:22:22
    java中setLayout()方法
  • QMainWindow setLayout无效

    2017-12-08 10:37:37
    QWidget::setLayout: Attempting to set QLayout “” on MainWindow “”, which already has a layout这句话的意思是说,你已经给MainWindow设置过一个布局了,再设置一个会出错。 该如何给QMainWindow正确地...
  • qt布局 setlayout无效

    千次阅读 2018-12-25 10:06:07
    操作步骤:qt生产带ui的界面文件中使用setlayout无效 原因分析:ui文件默认带有layout,需要删除之后再设置setlayout才可用 删除方法可参考如下:(qt帮助手册有) void clearLayout(QLayout* layout) {  ...
  • panel.setLayout(null);

    千次阅读 2020-04-22 09:04:33
    jpanel.setLayout(null):设置jpane;的布局管理器为空,之后可以手动设置组件的坐标位置和大小。 调用setBounds(x, y, width, height)定义组件的位置和大小,x 和 y 指定左上角的新位置,由 width 和 height 指定新的...
  • JAVA做个小窗口时候为什么用SetLayout(null)时候窗口里什么东西都不显示?本人刚刚学习JAVA,所以按照教科书在myeclipse7.5 上照打了这个例子,但是发现当SetLayout(null)时候,弹出的窗口一片空白什么都没有。各位...
  • JAVA的setLayout(空)

    2021-07-16 20:31:50
    I use setLayout (null) and I'm trying to place the buttons and textfield places I know by x, yThe problem when I run the program no matter what software (Eclipse, bluej)I need to run on the panel with...
  • 使用JPanel类的setLayout(0,4)方法设置网格布局管理器,即列数为4,行数自动调节;创建一个字符串型一维数组作为控件文本数组;创建一个JCheckBox型一维数组作为控件数组;使用for循环遍历控件数组,初始化数组中的...
  • Pyqt5中addLayout和setLayout的区别

    千次阅读 2019-12-30 13:01:47
    有些控件或者布局有addLayout和addWidget的函数,但是有些就没有,比如QWidget这个控件就没有addLayout和addWidget这个函数,取而代之的是一个setLayout函数,在addLayout函数中,我们可以多次使用addLayout来依次添加...
  • 我创建了一个JFrame类,并通过设置setLayout(null)演示了其在按钮上的工作。然后,我创建了一个扩展JPanel的类,并在其中添加了一些组件。这些组件的界限是在方法内部设置的。此类的对象包含在扩展JFrame的类中。...
  • centercontainer.setLayout(new java.awt.BorderLayout()); centercontainer.add(preMonth,java.awt.BorderLayout.WEST); centercontainer.add(center,java.awt.BorderLayout.CENTER); centercontainer.add(next...
  • 绝对布局,setLayout(null)

    千次阅读 2018-12-08 15:26:00
    c.setLayout( null ); // 将容器的布局设为绝对布局 JButton b1= new JButton("按钮1"),b2= new JButton("按钮2"); // 创建两个按钮 b1.setBounds(10,30,80,30); // 设置按钮在容器中的坐标和大小 b2....
  • setLayout(new GridLayout(行数,列数,行间距,列间距)); import java.awt.*; import javax.swing.*; public class demo extends JFrame { int size =9; JButton jbs[]=new JButton [size ]; public static void ...
  • PySide2.QtWidgets.QWidget.setLayout(arg__1)¶ Parameters arg__1 – ...
  • 如何在QMainWindow里使用setLayout()函数

    千次阅读 2018-07-11 18:30:02
    QMainWindow并没有setLayout()函数,因此不能使用setLayout()函数来设置layout,需要使用间接的方法。#include "mainwindow.h"#include "ui_mainwindow.h"#include &lt;QPushButton&gt;...
  • setLayout(null)在java中什么意思

    千次阅读 2019-01-25 18:11:34
    未设置Layout时,java默认为flowLayout布局的,设置为null即为清空布局管理器,之后添加组件,常常是设置组件左上角坐标相对于容器左上角(0,0)的x,y值来确定组件的位置,即使更改容器大小也不会改变位置。...
  • QWidget::setLayout: Attempting to set QLayout “” on MainWindow问题 这个问题出在setLayout只能用在QWidget内,要在QMainwindow中使用的话,用以下代码 QWidget * widget = new QWidget(); setCentralWidget...
  • setLayout()和GridData的设置

    千次阅读 2018-06-19 10:56:52
    (1)setLayout()是设置界面布局,如界面有几行几列 如jf.setLayout(new GridLayout(2,1));//容器共有2行1列。 GridLayout layout = new GridLayout(); layout.numColumns = 4; // 设置容器的列数 layout....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 77,870
精华内容 31,148
关键字:

setlayout