我正在尝试使用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();
}

07-24 19:50
查看更多