gpt4 book ai didi

java - IntelliJ IDEA - JScrollpane 中的 JPanel 未显示内容

转载 作者:行者123 更新时间:2023-12-02 04:33:45 26 4
gpt4 key购买 nike


我有一个 JScrollPane 需要填充来自数据库的数据。这些面板是用 IntelliJ IDEA 制作的。

public class NodeViewer extends JFrame {
private NodeManager _manager;
private JScrollPane _container;

public NodeViewer(NodeManager manager) {
setVisible(false);
pack();
setContentPane(_container);
setSize(new Dimension(1000, 700));
setLayout(new ScrollPaneLayout());
_manager = manager;
}

public void LoadData() {
_container.removeAll();
LoadNodes(_manager.GetAllNodes());
}

private void LoadNodes(List<Object> nodes) {
for (int i = 0; i < nodes.size(); i++) {

JPanel newPanel = new NodePanel((INode) nodes.get(i), i);
getContentPane().add(newPanel);
}
}

这是滚动 Pane ,它将为每次迭代创建一个 NodePanel,并将其添加到滚动 Pane 中。

public class NodePanel extends JPanel {
private JPanel _nodeContainer;
private JLabel _personName;
private JLabel _albumName;
private JLabel _bandName;
private JLabel _memberSince;
private JLabel _personBirth;
private JLabel _releasedOn;
private JButton _deletePerson;
private JButton _deleteBand;
private JButton _deleteAlbum;

public NodePanel(INode node, int i) {
setVisible(true);
setBounds(150, (i * 250) + (i * 25), 700, 250);
setSize(new Dimension(700, 250));
setLayout(new GridLayout());
setBackground(Color.BLUE);
SetContent(node);
}

节点面板扩展了 JPanel。

面板本身已创建:http://gyazo.com/6e55dc85c177f8599f16d3bdbeb6c36e如屏幕截图所示。但内容是看不到的。 NodePanel 中的所有 JLabel 均由 setText() 设置。

我尝试过重新绘制、重新验证几乎所有内容,但我似乎找不到问题所在。我还尝试了不同的布局类型,但这似乎也不重要。

最佳答案

几点

<小时/>
  • public class NodeViewer extends JFrame { ,不要扩展JFrame ,创建此 Obejct 作为局部变量(如 private NodeManager _manager; )
<小时/>

代码顺序非常重要,例如

  • JFrame.setVisible(false); ,为什么可见性设置为 false ,以及 JFrame.setVisible(true);此代码行应该是 public NodeViewer(NodeManager manager) { 中的最后一个代码行

  • JFrame.pack();应该在代码行 JFrame.setVisible(true); 之前,此代码行即将getPrefererSize来自所有JFrame第一级的 child (在本例中为 JScrollPane)

  • setSize(new Dimension(1000, 700)); ,而不是设置getPrefererSize对于 JScrollPane ,然后JFrame.pack();接受该值作为其 PrefererSize

  • setLayout(new ScrollPaneLayout());采取这个细节LayoutManager专为 JScrollPane 指定(在 API s、 BasicsScrollPaneUIUIManager 中),未指定为 LayoutManager对于 JFrame

<小时/>

主要问题

  • setContentPane(_container); != getContentPane().add(newPanel); ,也许是为了与你原来的主题相匹配

  • _container.removeAll(); , JSrollPane不是容器,选项在最后一点中进行了解释,否则使用 JSrollPane.setVieportView(something);

  • 覆盖getPreferredSize对于 public class NodePanel extends JPanel {而不是无用的代码行 setVisible(true);setBounds(150, (i * 250) + (i * 25), 700, 250);setSize(new Dimension(700, 250));

<小时/>

直接解决,

  • 使用起来并不容易JComponent.setText("")对于所有人JTextComponentspublic class NodePanel extends JPanel {而不是删除然后添加相同的 JPanel而不是重置值,隐藏在 SetContent(node); 后面的东西也应该用一些默认的初始值来刷新

关于java - IntelliJ IDEA - JScrollpane 中的 JPanel 未显示内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31098630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com