当前位置: 首页 > 知识库问答 >
问题:

请建议我使用基本布局,而不是GridBag布局

那弘
2023-03-14

好的,我有一个面板,我想在上面放置两个面板,左面板和右面板,这样右面板的宽度应该是左侧面板的两倍。

我想在左侧面板中添加一个菜单,所选项目的详细信息将出现在右侧面板中。

其次,当窗口扩展时,面板及其组件的大小应成比例增加(如果可以使用任何方法,请建议!)

我确实尝试过使用GridBagLayout,但我认为我还没有很好地掌握它。因此,请建议最简单的布局管理器,可以满足我的目的。

编辑:-我用GRIDBAG试过的问题

//Set Layout
        setLayout(new GridBagLayout());
        GridBagConstraints c= new GridBagConstraints();

        //Set Layout constraints of components and add them to the MainPanel
        c.gridx=0;
        c.gridy=0;
        c.weightx=0.5;
        c.insets= new Insets(5,5,5,5);
        c.fill=GridBagConstraints.BOTH;
        add(iListPanel);
        iListPanel.setBorder(BorderFactory.createTitledBorder("Check") );

        GridBagConstraints c1= new GridBagConstraints();
        c.gridx=1;
        c.gridy=0;
        c.weightx=1;
        c.insets= new Insets(5,5,5,5);
        c.fill=GridBagConstraints.BOTH;
        add(iDetailsPanel);
        iDetailsPanel.setBorder(BorderFactory.createTitledBorder("Check"));

共有2个答案

扈沛
2023-03-14

您想使用BorderLayout。

panel.add(panelLeft,"West");
panel.add(panelRight,"East");

还提供北、南和中

公良扬
2023-03-14

在Java附带的布局管理器中,我认为GridBagLayout是最简单的一种。值得花时间学习它,因为它是唯一一个有一半能力的布局经理。这应该做到:

JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints c;

JPanel left = new JPanel();
left.setBorder(BorderFactory.createTitledBorder("Left"));
c = new GridBagConstraints();
c.weightx = 1;
c.weighty = 1;
c.fill = c.BOTH;
panel.add(left, c);

JPanel right = new JPanel();
right.setBorder(BorderFactory.createTitledBorder("Right"));
c = new GridBagConstraints();
c.weightx = 2;
c.weighty = 1;
c.fill = c.BOTH;
panel.add(right, c);

但是,从您问题的描述来看,JSplitPane似乎可以更好地为您服务。它是一个现成的组件,可以或多或少地执行您的要求,并且还具有用户可调整大小的分隔符。一个例子:

JSplitPane pane = new JSplitPane();
pane.setResizeWeight(1/3f); // right will be twice size of left

JPanel left = new JPanel();
left.setBorder(BorderFactory.createTitledBorder("Left"));
pane.setLeftComponent(left);

JPanel right = new JPanel();
right.setBorder(BorderFactory.createTitledBorder("Right"));
pane.setRightComponent(right);

编辑:原始代码的问题是它没有使用约束。

add(iListPanel);

应该是:

add(iListPanel, c);

对于iDetailsGroup也是如此。

 类似资料:
  • 我有一个带有JLabel、JTextField的JPanel,还有一个带有JLabel的JPanel。 最后一个JLabel结果在某个操作后打印成功消息。 然而,问题是当我得到成功响应时,成功消息而不是在底部出现在第一个JLabel的右侧。我对秋千很陌生。有谁能帮帮我吗?

  • 问题内容: 仅Java库中就有8个布局管理器,然后还有一堆3rd party产品。 前几天,我尝试使用SpringLayout并…好吧,它对我来说没有用。看到我的另一个问题。所以…如果你有一个Swing应用设计,并希望您的布局 只是这样 ,什么是您的首选布局管理器?有什么有趣/有用的经验可以联系吗? 更新:是的 ,请确保我知道不同的LM适用于不同的布局。但是我希望你们中的大多数人在所做的大部分事情

  • 如何为我的所有页面创建基本模板? 我试着在所有可用的页面上做一个RadSideDrawer。(除了一些特定的页面,如登录/注册等)。 目前,我在所有页面上复制并通过我的菜单。正确的处理方式是什么?

  • 10.2.TimelineActivity的基本布局 在第一次迭代中,我们为TimelineActivity创建一个新的布局(Layout),它使用一个TextView来展示数据库中的所有消息。在刚开始的时候数据量不大,这样还是没有问题的。

  • 基本布局主要包括:水平布局、垂直布局、栅格布局和表单布局这 4 种。在讲解水平 布局和垂直布局之前,还要重点说一下它们的父类 -QBoxLayout,它也是使用比较多的,并 且包含了水平布局和垂直布局的一些共性特点。 11.3.1 QBoxLayout 使用 QBoxLayout 类可以创建一个布局,能够把其中的窗口部件水平的或者垂直的按照直线排列。 之所以取名为“Box”,是由于 QBoxLay

  • 问题解决了:我尝试了fmt.println.mko评论中的这个解决方案 您可以这样做,定义2个项目类型,一个用于您通常的卡片,一个用于您的2.RecycerView,使用int getItemViewType(int位置)返回特定类型。在onCreateViewHolder(ViewGroup parent,int viewType)中,您根据类型创建一个viewholder,可以是您的卡,也可以