首页 / JAVA / java-Swing外行分页
java-Swing外行分页
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-Swing外行分页,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3559字,纯文字阅读大概需要6分钟。
内容图文
在开始之前,存在类似的问题(我的),我希望删除该问题,因为我在那儿并没有很好地解释我的观点,但我对此并没有解释.谢谢.
首先,我没有代码,这只是我不知道的概念.但这很有趣(至少对我而言).
你们都知道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外行分页全部内容,希望文章能够帮你解决java-Swing外行分页所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。