我正在开发一个任务管理器,我需要在填写几个字段中的信息之后,将任务作为文本块一个接一个地列出,并将最新的块添加到上一个块之上。
PnlCase:附加到JFrame的JPanel,其中包含我遇到问题的部分
pnlNotesSct
:此部分应用程序的父JPanel
。
pnlNotesTitleBox
:包含btnNew
的孩子,用于添加新笔记。scpNotes
:这个孩子是JScrollPane
我要用来滚动浏览所有笔记。
pnlNotes
:按下JPanel
时,所有注释都会显示的孩子PnlUpdateCaseNotes
以及新的btnNew
。 PnlPermaNote:一个简单的JPanel
,JTextPane
用于格式化并将保存的备注添加到pnlNotes
。
PnlUpdateCaseNotes:包含JPanel
和JTextField
组件的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
之后也似乎无法找到明确的解决方案。
我还尝试使用两个JScrollPane
和JFrame
类创建一个简化的测试项目,并且我已经能够使用相同的代码完全按预期工作。
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
如果您需要更多背景信息,请与我们联系。