ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-Swing外行分页

2019-10-13 21:14:10  阅读:191  来源: 互联网

标签:java swing pagination


在开始之前,存在类似的问题(我的),我希望删除该问题,因为我在那儿并没有很好地解释我的观点,但我对此并没有解释.谢谢.

首先,我没有代码,这只是我不知道的概念.但这很有趣(至少对我而言).

你们都知道MSWord是如何工作的.你写东西.然后,当您填充页面时,它将创建一个新页面并开始在该页面上书写.如果将更多文本粘贴到首页,则所有内容都会被下推.如果您删除页面上的大量文本,则会吸收上一页的一些文本.如果您正在处理例如图片,而您在页面顶部有一个图片,请减小图片的大小,如果图片的缩小版本有足够的空间,它会被吸引到上一页.

现在您正在以这种方式思考,我想将该概念转换为Java Swing.页面是JPanel,而图片和文本块(或行)是安装在页面JPanel上的JPanel.

我已经提出了使用Filler的方法的方法(好的,我撒谎了,我有一些代码,但是一团糟,无论如何它还是行不通的),这在所有情况下都不起作用.如果您想知道为什么,请在两行之间阅读,否则就跳过它.

因此,结构本身很容易复制,但保持它却是脖子上的痛苦.您会看到,可能发生两种主要类型的事件:

a) height of the page content has increased
b) height of the page content has decreased

通过将Filler用作页面的最后一个组件,并在其上附加componentAdapter(componentResized),您可以监视这些更改.

这些更改可以进一步分为:

a) element is added/removed to/from page
b) height of the element has increased/decreased 

考虑到这些事件,可能会发生许多事情.跳过简单的情况,请看以下示例:

Page 1:
{element 1
blabla
blabla}
{element 2
blabla}
{element 3}
{element 4
blabla
blabla
blabla
blabla}
{free space
---
---
---}

/

Page 2:
{element 1
blabla
blabla
blabla
blabla}
{element 2
blabla
blabla
blabla
blabla}
{element 3}
{element 4
blabla
blabla
blabla}

/

Page 3:
{element 1}
{element 2}
{element 3}
{element 4}
{element 5}
{free space
---
---
---
---
---
---
---
---
---}

每页的高度为15行.现在看一下,如果将第二页元素1的高度减少一行,会发生什么.它将变为4行高,使其适合上一页,被吸住了.这将在第二页上创建5(价值1(已删除的行4被吸掉的行))行的可用空间.这将吸收第三页上的所有五个元素,并将第三页留空(现在应将其删除).

之所以不起作用,是因为在删除后,第二页触发了一个侦听器,它既要向上推动顶部元素,又要吸收上一页中的元素.由于所有操作都是在侦听器中完成的,因此我必须等待其执行才能在程序中注册视觉更改.由于必须在页面上更改两件事,因此会引起某种听者混乱.页面高度减少了两次,但只注册了一次,最后我只能完全移动其顶部或底部,或每侧一个组件.这并不是一个很好的解释,但是如果您了解秋千的工作原理,那么您应该可以自己连接圆点.

正如我之前提到的,我已经为此编写了代码,但是它很长且很难遵循,如果有人愿意看到它,可以在这里发布.我说的是SSCCE本身.实际上,它不能缩短为几十行的代码.

我想要的是跳过编写一种算法来维护“文档”的结构,并移动所有元素,因为这样做是一件非常复杂的事情,需要处理很多情况.

我想要的是替代方法,我问你是否有任何想法.我想到的一件事是具有类似于JPanel的组件.它将具有固定的高度部分,可以填充其他组件,并且它们之间的固定的高度部分是不可填充的(?)或“实心”.

它的工作方式是,每次将某些内容添加到可填充(?)部件时,它们都会自动重新排列.如果某项不适合当前的可填充部分,则将其移至下一个(类似于Verticall Box布局的工作原理,向某处添加一件事将所有其他部分向下推),但跳过实体部分.

由于我还必须能够确定某个组件位于哪个可填充部分中,因此我不知道在Java swing中是否可以创建这样的结构.

好吧,欢迎您提供任何建议,包括外部库.

请记住,整个文档是带有页面的文档,这些页面将在JScrollPane的视口中一个接一个地放置,这是对其外观的唯一限制.

解决方法:

让布局完成工作:将JPanel的add()实例(基于内容,每个都有其自己的首选大小)添加到具有垂直布局的Box中.将Box放在JScrollPane中,可以选择实现Scrolable.根据需要使用滚动窗格的行和列标题; JTable是一个示例.您可以根据需要从Box中移除()面板,revalidate()和repaint().

附录:最初的答案仅解决了问题的观点.就像text components一样,它可能有助于分离模型和更严格地查看.从模型中删除内容并向视图发送信号以进行相应的更新.为了实现这一点,提到了实现观察者模式的几种常见方法here.

标签:java,swing,pagination
来源: https://codeday.me/bug/20191013/1910597.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有