当前位置: 首页 > 面试题库 >

如何防止Boxlayout / Box拉伸子组件?

丁淇
2023-03-14
问题内容

正如您在下面的可运行代码中看到的那样,我尝试使用具有可扩展子框的Box。孩子们的盒子可以改变大小,这一切都很好。主要问题是大小始终相对于父对象。但是我希望它们具有特定的大小,以防万一没有地方再使用JScrollPane。目前,它们仅收缩其他子框。

我尝试了Glue和Filler,但是没有用。胶水只是无效,而填充剂的副作用是始终将其保持在某个位置(即使在ScrollPane起作用时)。有这么多可用空间是非常丑陋的。

因此,您知道防止框拉伸孩子的好方法吗?

先感谢您!

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.TitledBorder;


public class ExpandableMenueDemo {
    Box allBoxes; 
    ExpandableMenueDemo(){
        allBoxes = Box.createVerticalBox();

        TitledBorder title;
        title = BorderFactory.createTitledBorder("Filter");
        allBoxes.setBorder(title);

        for (int i = 0 ;i<3;i++){
            //generate collapsable components
            SubBox b = new SubBox("SubBox"+i);
            allBoxes.add(b.getSwingBox());

        }
        allBoxes.add(Box.createVerticalGlue());
    }

    public Container getMenue(){
        return allBoxes;
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        ExpandableMenueDemo m = new ExpandableMenueDemo();
        Box mainBox = Box.createHorizontalBox();

        mainBox.add(new JScrollPane(m.getMenue()));
        mainBox.add(new JTable(20,5));

        frame.setContentPane(mainBox);
        frame.pack();
        frame.setVisible(true);
    }


    class SubBox{
        Box box;
        Box header; 
        String name; 
        JButton cBtn;
        boolean isCollapsed = true;
        JLabel headerLine;

        SubBox(String name) {
            this.name= name;
            box = Box.createVerticalBox();

            headerLine = new JLabel(name+" () :");

            header= Box.createHorizontalBox();
            cBtn = new JButton("v");
            cBtn.addActionListener(new ActionListener(){

                @Override
                public void actionPerformed(ActionEvent arg0) {
                    if (isCollapsed)show();
                    else collapse();
                }
            });
            collapse();

            header.add(cBtn);
            header.add(Box.createHorizontalStrut(10));
            header.add(headerLine);
            header.add(Box.createHorizontalGlue());

        }

        Box getSwingBox() {
            Box b = Box.createVerticalBox();    
            b.add(header);
            b.add(box);
            return b;
        }

        public void collapse(){
            System.out.println("collapse");
            box.removeAll();
            this.isCollapsed=true;
            cBtn.setText("v");
        }

        public void show(){
            System.out.println("show");
            box.removeAll();
            this.isCollapsed=false;
            cBtn.setText("^");

            for (int i = 0; i<3;i++) { 
               Box b = Box.createHorizontalBox();
               b.add(Box.createHorizontalStrut(20));
               b.add(new JCheckBox("checkBox "+i));
               b.add(Box.createHorizontalGlue());
               box.add(b);
            }
        }
    }
}

问题答案:

您可以考虑使用SwingX中包含的JXTaskPane /
-Container,而不是重新发明轮子。它的演示在左侧展示了它的运行状态(如taskPanes)-这是选择演示的一部分。



 类似资料:
  • 问题内容: 嗨,我使用a 来使彼此堆叠(),例如,如果我的父母的身高为500像素,并且我向其添加了两个子面板,两者的高度均为100像素。在绵延他们,让他们一起占据了500px的空间。有谁知道如何禁用此功能? 问题答案: 请改用GridBagLayout。您对UI的控制更多。 但是,如果您仍要使用BoxLayout且不希望它们拉伸,则可以使用不可见的组件填充物(如刚性区域,胶水和填充物)进行签出。

  • 问题内容: 样品: 我有两个问题,请: 为什么基本上会发生这种情况? 什么是正确的方法,以防止其拉伸而不影响flex容器中的其他flex项目? 问题答案: 您不想拉伸高度跨度吗? 您可能会影响一个或多个弹性项目,而不会拉伸容器的整个高度。 要影响容器的所有弹性项目,请选择以下选项: 您必须设置为,并且该容器的所有弹性项目都将获得其内容的高度。 要仅影响单个flex-item,请选择以下选项: 如果

  • 问题内容: 我有一个看起来像这样的东西: 我的问题是s在垂直方向上会变得很大。我只希望它们对于一行来说足够高,因为这是用户可以在其中键入的全部内容。按钮很好(它们不会垂直扩展)。 有什么方法可以防止s扩展?我是Swing的新手,所以如果我做的所有事情都太糟糕了,请告诉我。 问题答案:

  • 问题内容: 我需要伸展黄色的孩子来填补父母的所有身高。无需设置父级高度。父级的高度应取决于蓝色的子级文本。 问题答案: 使用Flexbox时,主要错误是开始全面使用。 在很多情况下,我们已经习惯了这一点,尽管谈到Flexbox时,它通常会破坏它。 解决方案很简单,只需删除,它将自动运行。 它的原因,是 柔性的项目 在 行 方向(默认),控制垂直行为,并作为其默认的是这只是工作原样。 堆栈片段

  • 本文向大家介绍Javascript防止图片拉伸的自适应处理方法,包括了Javascript防止图片拉伸的自适应处理方法的使用技巧和注意事项,需要的朋友参考一下 前言 相信大家在日常的web开发中,作为前端经常会遇到处理图片拉伸问题的情况。 例如banner、图文列表、头像等所有和用户或客户自主操作图片上传的地方,而一旦牵扯图片,就会涉及到图片拉伸的问题,当然,在图片上传时做手动裁切,让用户或客户清

  • 本文向大家介绍拉伸相关面试题,主要包含被问及拉伸时的应答技巧和注意事项,需要的朋友参考一下 “ a”标签是内联级别元素。没有内联级别元素可以设置其宽度。为什么?因为内联级别的元素是要表示流畅的文本的,所以理论上可以从一行换行到另一行。在这种情况下,提供元素的宽度是没有意义的,因为您不一定知道它是否要包装。为了设置其宽度,您必须将其显示属性更改为或: 如果有内存,则 可以 在IE6中的某些内联级别元