Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 打包JMeterGUI_Java_Swing_User Interface_Jmeter_Pack - Fatal编程技术网

Java 打包JMeterGUI

Java 打包JMeterGUI,java,swing,user-interface,jmeter,pack,Java,Swing,User Interface,Jmeter,Pack,我正在尝试使用 当创建了太多的JComponent对象时,我希望我的AbstractSamplerGui滚动。如果我用简单的对象创建面板,我没有问题。。面板将精细滚动: import org.apache.jmeter.gui.util.VerticalPanel; import org.apache.jmeter.samplers.gui.AbstractSamplerGui; ... public final class MyGui extends AbstractSamplerGui

我正在尝试使用

当创建了太多的
JComponent
对象时,我希望我的
AbstractSamplerGui
滚动。如果我用简单的对象创建面板,我没有问题。。面板将精细滚动:

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);
    }
    ...
import org.apache.jmeter.gui.util.VerticalPanel;
导入org.apache.jmeter.samplers.gui.AbstractSamplerGui;
...
公共最终类MyGui扩展了AbstractSamplerGui{
公共MyGui(){
最终垂直面板=新垂直面板();
对于(int i=0;i<100;i++){
添加(新JLabel(“测试”));
panel.add(新的JTextArea());
}
添加(面板);
}
...
但是,当我给
JTextArea
对象一个非默认大小
newjtextarea(30,30))
时,滚动条没有注意到页面变大了。这意味着有一半的项目超出了面板(无法访问)

我知道在添加项目后,您应该在
JFrame
上调用
pack
,但我不知道如何在这里这样做。
AbstractSamplerGui
扩展了
JPanel
,它没有
pack
方法

我尝试使用JMeter API查找
JFrame
,但没有成功。我也不认为使用
SwingUtilities::getRoot
可以找到根框架,因为这项工作是在
JPanel
的构造函数中完成的

任何帮助都将不胜感激

我刚刚用JPanel panel=newjpanel()替换了panel

是的,但是我们不知道AbstractSamplerGui在做什么。它可能对组件的宽度有一些限制

我也不认为我可以使用SwingUtilities::getRoot找到根框架,因为这项工作是在JPanel的构造函数中完成的

您可以尝试向面板中添加
AncestorListener
。将面板添加到可见GUI时,应生成
ancestorAdded
事件。然后,您应能够获取父窗口,以便对其进行打包:

@Override
public void ancestorAdded(AncestorEvent e)
{
    JComponent component = e.getComponent();

    Window window = SwingUtilities.windowForComponent(component);

    window.pack();
}
我刚刚用JPanel panel=newjpanel()替换了panel

是的,但是我们不知道AbstractSamplerGui在做什么。它可能对组件的宽度有一些限制

我也不认为我可以使用SwingUtilities::getRoot找到根框架,因为这项工作是在JPanel的构造函数中完成的

您可以尝试向面板中添加
AncestorListener
。将面板添加到可见GUI时,应生成
ancestorAdded
事件。然后,您应能够获取父窗口,以便对其进行打包:

@Override
public void ancestorAdded(AncestorEvent e)
{
    JComponent component = e.getComponent();

    Window window = SwingUtilities.windowForComponent(component);

    window.pack();
}

为什么有人使用swing?
-因为swing易于使用和自定义。对swing缺乏了解并不是抱怨的理由。问题在于您的自定义代码,而不是swing。谁知道您的代码为什么不起作用。“VerticalPanel”是一个非标准类,我不知道它是做什么的。布局问题可能就在那里。@camickr its更像是一个有趣的注释:p也是VerticalPanel是JMeterAPI的一部分。我将添加imports@camickr我刚刚用
JPanel panel=new JPanel();panel.setLayout(new BoxLayout(panel,BoxLayout.Y_轴)替换了
panel
)
我也看到了同样的问题。
为什么有人使用swing?
-因为swing易于使用和自定义。缺乏swing方面的知识并不是抱怨它的理由。问题在于您的自定义代码,而不是swing。谁知道您的代码为什么不起作用。“VerticalPanel”是一个非标准类,我不知道它是做什么的。布局问题可能就在那里。@camickr its更像是一个有趣的注释:p也是VerticalPanel是JMeterAPI的一部分。我将添加imports@camickr我刚刚用
JPanel panel=new JPanel();panel.setLayout(new BoxLayout(panel,BoxLayout.Y_轴)替换了
panel
);
我也看到了同样的问题。只是尝试了这个,不幸的是它没有解决问题。我不确定JMeter在引擎盖下做了什么导致了这种行为;也许包装不是我问题的真正原因……我会继续调查。感谢您的回复:)只是尝试了这个,不幸的是它没有解决问题。我不确定JMeter在引擎盖下做的事情导致了这种行为;也许包装不是我问题的真正原因……我会继续调查。感谢您的回复:)