如何更改JPanel的大小以适应动态生成的JBList?

时间:2016-01-24 18:18:08

标签: java swing intellij-idea jpanel intellij-plugin

我正在尝试为IntelliJ创建一个弹出插件。弹出窗口包含一个JPanel(parentPanel),它包含一个JList(我使用JBList,它只是Intellij的一个sublcass)和JTextField。列表的内容是动态构建的,具体取决于用户按Tab键时JTextField的内容。

这就是我目前正在尝试的。结果是使用适当的元素构造新的JList,但JPanel保持完全相同的大小,因此大多数JList被阻塞。如何展开面板(以及整个弹出窗口)以便整个列表可见?

我是否在使用JPanel做错了,或者是弹出窗口本身的大小?

parentPanel从此行接收GridLayout

this.setLayout(new GridLayout(2,1));

以下是修改JList的代码。

DefaultListModel listModel = (DefaultListModel) parentPanel.getFileList().getModel();
listModel.removeAllElements();
VirtualFile[] children = currentPathFile.getChildren();

for(int i = 0; i < children.length; ++i) {
   listModel.addElement(children[i].getPath());
}
parentPanel.remove(1); // The list is the panel's second child
parentPanel.add(new JBList(listModel));
parentPanel.revalidate();
parentPanel.repaint();

即使我给GridLayout 10行,JList也只占用一行。 enter image description here

1 个答案:

答案 0 :(得分:1)

如果JPanelFlowLayout,则其默认布局为GridLayout,其保留初始首选大小,通常由原始内容的首选大小定义。尝试将其更改为GridLayout,这将允许列表在调整封闭面板大小时增大和缩小。

  

这也不起作用。已添加setVisibleRowCount()代码。

由于JBList扩展了JList,您可以使用var viewPort = d3.svg.brush() .x(xScale) .on('brush', function () { var newDomain = viewPort.empty() ? xScale.domain() : viewPort.extent(); console.log(JSON.stringify(newDomain, null, 2)); detailsChart.setXDomain(newDomain); detailsChart.renderAxis(); detailsChart.renderSeries(); }); ,如图所示here