精华内容
下载资源
问答
  • Java FlowLayout布局的时候换行的问题
    千次阅读
    2011-10-01 23:24:27
    更多相关内容
  • 而lineMaxHeight用来记录当前行的子View中的最大高度,当换行时候传递给heightUse,使下一阶段的子View添加下沉高度。 这段代码是什么意义: measureChildWithMargins(child, widthMeasureSpec, 0, ...

    a0cb8cb73187

    批注 2020-02-10 212314.png

    先上完整代码:

    public class TagLayout extends ViewGroup {

    List childrenBounds = new ArrayList<>();

    public TagLayout(Context context, AttributeSet attrs) {

    super(context, attrs);

    }

    @Override

    protected void onLayout(boolean changed, int l, int t, int r, int b) {

    for (int i = 0; i < getChildCount(); i++) {

    View child = getChildAt(i);

    Rect childBound = childrenBounds.get(i);

    child.layout(childBound.left, childBound.top, childBound.right, childBound.bottom);

    }

    }

    @Override

    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    int lineMaxWidth = 0;

    int heightUse = 0;

    int widthUse = 0;

    int lineMaxHeight = 0;

    int specMode=MeasureSpec.getMode(widthMeasureSpec);

    int specWidth = MeasureSpec.getSize(widthMeasureSpec);

    for (int i = 0; i < getChildCount(); i++) {

    View child = getChildAt(i);

    measureChildWithMargins(child, widthMeasureSpec, 0, heightMeasureSpec, heightUse);

    if (specMode!=MeasureSpec.UNSPECIFIED&&widthUse + child.getMeasuredWidth() > specWidth) {

    // 另起一行

    widthUse = 0;

    heightUse += lineMaxHeight;

    lineMaxHeight=0;

    measureChildWithMargins(child, widthMeasureSpec, 0, heightMeasureSpec, heightUse);

    }

    Rect childBound;

    if (childrenBounds.size() <= i) {

    childBound = new Rect();

    childrenBounds.add(childBound);

    } else {

    childBound = childrenBounds.get(i);

    }

    childBound.set(

    widthUse,

    heightUse,

    widthUse + getMeasuredWidth(),

    heightUse + getMeasuredHeight());

    widthUse += child.getMeasuredWidth();

    lineMaxWidth = Math.max(lineMaxWidth, widthUse);

    lineMaxHeight = Math.max(lineMaxHeight, child.getMeasuredHeight());

    }

    int width = lineMaxWidth;

    int height = lineMaxHeight+heightUse;

    setMeasuredDimension(width, height);

    }

    @Override

    public LayoutParams generateLayoutParams(AttributeSet attrs) {

    return new MarginLayoutParams(getContext(), attrs);

    }

    }

    ## 准备工作

    定义一个容器来存储子View的位置信息:

    ```java

    List childrenBounds = new ArrayList<>();

    先从onMeasure()阶段开始

    定义了四个量:

    int widthUse = 0;//使用了多少宽度

    int heightUse = 0;//使用了多少高度

    int lineMaxWidth = 0; //当前最大宽度

    int lineMaxHeight = 0;//当前最大高度

    这个布局是个横向排列的过程,我们用一个widthUse来记录当前行横向使用的宽度,则计算下个子View位置时候,只需在此基础上累加即可。

    而lineMaxHeight用来记录当前行的子View中的最大高度,当换行时候传递给heightUse,使下一阶段的子View添加下沉高度。

    这段代码是什么意义:

    measureChildWithMargins(child, widthMeasureSpec, 0, heightMeasureSpec, heightUse);

    这其实是安卓帮我们做了一个自动计算的过程:

    LayoutParams layoutParams = child.getLayoutParams();

    int specWidthMode = MeasureSpec.getMode(widthMeasureSpec);

    int specWidthSize = MeasureSpec.getSize(widthMeasureSpec);

    int childWidthMode;

    int childWidthSize;

    switch (layoutParams.width) {

    case LayoutParams.MATCH_PARENT:

    switch (specWidthMode) {

    case MeasureSpec.EXACTLY:

    case MeasureSpec.AT_MOST:

    childWidthMode = MeasureSpec.EXACTLY;

    childWidthSize = specWidthSize - useWidth;

    break;

    case MeasureSpec.UNSPECIFIED:

    childWidthMode = MeasureSpec.UNSPECIFIED;

    childWidthSize = 0;

    break;

    }

    break;

    case LayoutParams.WRAP_CONTENT:

    break;

    }

    可以类比为如上的代码,根据开发者传入的参数类型进行数值的自动适配

    onLayout()阶段

    循环设置布局参数

    for (int i = 0; i < getChildCount(); i++) {

    View child = getChildAt(i);

    Rect childBound = childrenBounds.get(i);

    child.layout(childBound.left, childBound.top, childBound.right, childBound.bottom);

    }

    展开全文
  • java 流式FlowLayout布局换行方法

    千次阅读 2020-05-03 11:23:42
    java 流式FlowLayout布局换行方法 怎么简单怎么来 方法一 add(new JLabel(" ")); //添加空白标签来实现换行 空白标签的空格数量由你来决定 方法二 将标签设置为不可视 setVisiable(false) 方法三 这里是引用 .....

    java 流式FlowLayout布局换行方法

    怎么简单怎么来
    方法一

    add(new JLabel("          "));     //添加空白标签来实现换行

    空白标签的空格数量由你来决定

    方法二
    将标签设置为不可视

    setVisiable(false

    方法三(看了看别人的方法)

    JButton c=new JButton("          "    +"      ");
    c.setContentAreaFilled(false);
    c.setBorderPainted(false);
    c.setEnabled(false);

    版权声明:本文为CSDN博主「宁悦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/deramer1/article/details/73135595

    展开全文
  • 空间不够了就在下面那“行“位置开始添加组件 这个布局实现精确布局是不怎么可能了吧 你放个label什么的控件,然后setVisiable(false) FlowLayout是流式布局,就算你已经换行成功,它也会随着窗口的变化而变化。...

    来源:http://topic.csdn.net/t/20060505/15/4731462.html

    参考:http://www.itzcn.com/video-vid-2252-spid-50.html

    http://zhidao.baidu.com/question/65633532.html

    用GridLayout设置为2行一列就OK啦~~FlowLayout只是单行顺序显示!!

    不知道FlowLayout有没有换行功能,帮up。

    这个问题也困惑我好久,一起顶,盼高手解答

    昨天看了下FlowLayout和GridLayout,里面好像没有换行这个概念.....似乎都是用数学方法计算添加组件的空间,空间不够了就在下面那“行“位置开始添加组件

    这个布局实现精确布局是不怎么可能了吧

    你放个label什么的控件,然后setVisiable(false)

    FlowLayout是流式布局,就算你已经换行成功,它也会随着窗口的变化而变化。也就是说没有必要进行换行。

    什么布局比较精确实用呢?

    this.setLayout(null);可以在布局中的任何坐标位置画控件。

    楼上的意思也就是不使用布局管理器,这样一来,我们把自己的控件用它们自己的方法,比如setBounds之类的,就可以任意布局了。

    对了,一般的想做的美观的都采用这样的方法的。

    我是二楼的,又发现这个帖子了,我后来用BoxLayout解决了:JPanel pane = new JPanel();BoxLayout lo = new BoxLayout(pane, Y_AXIS)pane.setLayout(lo);然后在pane里直接用add()方法添加,就是竖着排的了。

    展开全文
  • JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密...
  • 主要介绍了Java Swing组件布局管理器之FlowLayout(流式布局),结合实例形式分析了Swing组件布局管理器FlowLayout流式布局的常用方法及相关使用技巧,需要的朋友可以参考下
  • 我正在尝试使用多行文本... 或者,我可以只为JLabel指定最大宽度并知道文本会像div一样自动换行吗?private void addLegend() {JPanel comparisonPanel = getComparisonPanel();//this all displays on one lineJLab...
  • 自动换行的流式布局

    2021-03-04 07:37:32
    1.[代码][Java]代码package com.robert;import android.content.Context;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;...import java.util.List...
  • JDK中包含的java.awt.FlowLayout自动包装所包含的组件: JPanel mainPanel = new JPanel(new FlowLayout()); mainPanel.add(subPanel1); mainPanel.add(subPanel2); mainPanel.add(subPanel3); ... 首选高度已关闭,...
  • Android自动换行布局

    2021-07-27 11:27:06
    在网上找了挺久都没找到好用的自动换行布局,于是干脆自己写一个吧,原理其实就是计算布局大小,然后摆放的时候计算子view摆放的时候是否大于父view的最大宽度,超过了就在下面一行摆放就好了,注释就不多写了 ...
  • You can set the style in xml or in java. ####xml Set the autoWrapLineLayout:verticalGap, autoWrapLineLayout:horizontalGap and autoWrapLineLayout:fillMode values. android:id="@+id/auto_wrap_line_...
  • Java 有关GUI中JPanel的换行问题

    千次阅读 2021-02-25 18:34:43
    展开全部你没有放出完整代码32313133353236313431303231363533e58685e5...我就给你写一个示例吧参考代码importjava.awt.*;importjavax.swing.*;publicclassTestDemoextendsJFrame{publicTestDemo(){JPaneljp1=newJP...
  • 我实现了与此类似的东西,但使用我认为处理间距和填充的更标准的方法。请让我知道你们的想法,并且...importjava.util.ArrayList;importjava.util.Collections;importjava.util.Iterator;importjava.util.List;impo...
  • 核心思想:基于row布局的wrap属性实现自动换行WorkStatusViewStyles = StyleSheet.create({//基于flex-box布局container: {width: width,flexDirection: 'column',flexWrap: 'wrap',backgroundColor: '#dd0ff0',...
  • 当我试图设置一个简单的双行文本编辑器时(每行限制字符长度,最多两行),我偶然偶然发现了这个…基本上,给定合适的布局管理器,这个组件可以自己增长 – 它实际上是有道理的,但让我感到惊讶……此外,您可能希望使用...
  • 现在,我希望Jlabel在到达屏幕末尾时自动将文本换行到下一行,例如"记事本"中的"自动换行"功能。我怎样才能做到这一点?仅供参考,安德鲁斯的回答是最好的。@HovercraftFullOfEels 我只是知道屏幕截图会有所作为! ...
  • JAVA代码规范(一)

    2021-03-21 09:31:11
    2.源文件每个JAVA源文件都包含一个单一的公共类或接口,且公共类必须是这里的第一个类。3.开头注释根据个人需要,最好列出类名,版本信息,日期,等等。4.包和引入语句第一个非注释行是包语句,其后可以跟引入语句。...
  • 而不是将文本换行标签,您还必须将标签放入一个容器中,该容器遵循首选高度并将宽度设置为最大值。例如,可以将标签放在BorderLayout.这里有一个简单但完整的工作程序来说明这一点。您可以根据需要调整框架的大小;标签...
  • 流式布局,自动换行 使用方法: 1、依赖配置 在项目最外面的build.gradle文件中,allprojects节点下的repositories中添加: maven { url "https://dl.bintray.com/teadoglibrary/flowViewGroup" } 再在app的build....
  • Java|Swing】关于JLabel换行

    万次阅读 2018-02-17 21:47:09
    最近在用Swing做Windows的窗口程序,在使用JLabel时发现使用\n没办法换行,于是乎借助百度一下弄懂了JLabel是如何实现换行的。 先可以看一下使用\n的效果 JLabel label=new JLabel("数据版本\nv1.0.0&...
  • JAVA图形界面(GUI)之布局管理器

    千次阅读 2021-03-17 14:50:31
    布局管理器就是用来管理读者的界面。摆放的效果直接影响到界面是否美观。布局管理器通过布局管理类来对各种读者组件进行管理。使用布局管理器,不仅可以有序的排列组件,而且当窗体发生变化时,布局管理器很根据新...
  • 看看下一行的宽度够不够,不够的话就进行单词内的断句 word-break:break-all则更粗暴,直接进行单词内的断句 white-space white-space 属性设置如何处理元素内的空白,这个属性声明建立布局过程中如何处理元素中的...
  • //调整此窗口的大小,以适合其子组件的首选大小和布局。 //如果该窗口和/或其所有者还不可显示,则在计算首选 //大小之前都将变得可显示。在计算首选大小之后,将会验证该窗口。 pack(); setVisible(true); } ...
  • Java JFrame常用的布局

    万次阅读 2017-06-01 18:27:09
    setLayout(布局对象); 声明布局格式的方式 如: setLayout(new FlowLayout()); 1. FlowLayout布局  FlowLayout布局是JPanel 的默认布局,组建按照加入的先后顺序从左到右排列,一行排满之后就转到下一行继续从...
  • GridLayout(网格布局管理器) 可以把容器分成n行m列大小相等的网格,每个网格放置一个组件,按照从左往右,从上往下的顺序依次添加,放置在Gird Layout布局管理器的组件将自动占据网格的整个区域。 GridLayout构造...
  • FlowLayout应该是Swing布局管理器学习中最简单、最基础的一个。所谓流式,就是内部控件像水流一样,从前到后按顺序水平排列,直到达到容器的宽度时跳转到第二行。既然是水平排列,那么就存在三种基本的对齐方式:...
  • 因为我这个分类是写死的,不是动态获取的,所以我没有用RadioGroup然后动态添加radioButton,因为Radiogroup设置换行以及每行的个数非常麻烦,也没有用类似gridView实现。这个就是写死的RadioButton。xml布局android:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,210
精华内容 7,284
关键字:

java 布局 换行

java 订阅