将不同大小的JPanel添加到JScrollPane内的JPanel(显示问题)

时间:2018-01-14 21:58:30

标签: java swing jpanel jscrollpane

我正在开发一个任务管理器,我需要在填写几个字段中的信息之后,将任务作为文本块一个接一个地列出,并将最新的块添加到上一个块之上。

结构和命名:

PnlCase:附加到JFrame的JPanel,其中包含我遇到问题的部分

  • pnlNotesSct:此部分应用程序的父JPanel
    • pnlNotesTitleBox:包含btnNew的孩子,用于添加新笔记。
    • scpNotes:这个孩子是JScrollPane我要用来滚动浏览所有笔记。
      • pnlNotes:按下JPanel时,所有注释都会显示的孩子PnlUpdateCaseNotes以及新的btnNew

PnlPermaNote:一个简单的JPanelJTextPane用于格式化并将保存的备注添加到pnlNotes

PnlUpdateCaseNotes:包含JPanelJTextField组件的JButton

行为:

当按btnNew时,新的PnlUpdateCaseNotes实例会添加到当前pnlNotes实例上方的PnlPermaNote,有效地将其推下来为新{{1}腾出空间}}

以下方法可以完成工作:

JPanel

我不明白为什么我得到以下结果:

before clicking the button (note that the text block appears in full)

After clicking the button (adds a new JPanel)

问题:

After scrolling down (note that the text block is now partially missing)

我已经能够排除private void btnNewNoteActionPerformed(java.awt.event.ActionEvent evt) { PnlUpdateCaseNotes p = new PnlUpdateCaseNotes(this); pnlNotes.add(p, 0); scpNotes.setViewportView(pnlNotes); scpNotes.validate(); btnNewNote.setVisible(false); } 实例的任何大小更改,因为我通过添加边框进行测试,边框超出了PnlPermaNote。 我还经历过以前发布的一些问题,但即使在弄乱了JScrollPane之后也似乎无法找到明确的解决方案。

我还尝试使用两个JScrollPaneJFrame类创建一个简化的测试项目,并且我已经能够使用相同的代码完全按预期工作。

PnlText

我希望有人能帮助我对此有所了解,因为我有点难过。

感谢阅读!

以下是private void btnAddActionPerformed(java.awt.event.ActionEvent evt) { PnlText t = new PnlText(); pnlNotes.add(t, 0); scpNotes.setViewportView(pnlNotes); scpNotes.validate(); } 的完整代码:https://pastebin.com/34cJVFTU以及简化测试用例的代码:https://pastebin.com/JmB88buz

如果您需要更多背景信息,请与我们联系。

0 个答案:

没有答案