我正在尝试使用this API为我的JMeter插件制作GUI
创建太多的AbstractSamplerGui
对象时,我希望JComponent
滚动。如果我创建带有简单对象的面板,则没有问题..面板可以正常滚动:
import org.apache.jmeter.gui.util.VerticalPanel;
import org.apache.jmeter.samplers.gui.AbstractSamplerGui;
...
public final class MyGui extends AbstractSamplerGui {
public MyGui() {
final VerticalPanel panel = new VerticalPanel();
for (int i = 0; i < 100; i++) {
panel.add(new JLabel("TEST"));
panel.add(new JTextArea());
}
add(panel);
}
...
但是,当我给
JTextArea
对象赋予非默认大小new JTextArea(30, 30))
时,滚动条不会注意到页面更大了。这意味着一半的项目超出了面板(不可到达)。我了解您应该在添加项目后在
pack
上调用JFrame
,但是我不知道我该怎么做。 AbstractSamplerGui
扩展了没有JPanel
方法的pack
。我尝试使用JMeter API查找
JFrame
,但是我没有运气。我也不认为我可以使用SwingUtilities::getRoot
找到根框架,因为这项工作是在JPanel
的构造函数中完成的。任何帮助,将不胜感激!
最佳答案
我只是将面板替换为JPanel panel = new JPanel();
是的,但是我们不知道AbstractSamplerGui在做什么。它可能对组件的宽度有一些限制。
我也不认为我可以使用SwingUtilities :: getRoot找到根框架,因为这项工作是在JPanel的构造函数中完成的。
您可以尝试在面板中添加AncestorListener
。将面板添加到可见GUI时,应生成ancestorAdded
事件。然后,您应该能够获取父窗口,以便可以打包它:
@Override
public void ancestorAdded(AncestorEvent e)
{
JComponent component = e.getComponent();
Window window = SwingUtilities.windowForComponent(component);
window.pack();
}