2016-10-07 6 views
0

Я пытаюсь сделать GUI для моего JMeter плагин с помощью 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.

Я пробовал найти JFrame с использованием JMeter API, но мне не повезло. Я также не думаю, что могу найти корневой фрейм, используя SwingUtilities::getRoot, потому что эта работа выполняется внутри конструктора для JPanel.

Любая помощь будет оценена!

+3

'Почему кто-нибудь использует качели?' - потому что он прост в использовании и настройке. Отсутствие знаний о Свинге - не повод для размышлений об этом. Проблема заключается в вашем пользовательском коде, а не в Swing. Кто знает, почему ваш код не работает. «VerticalPanel» - это нестандартный класс, и я понятия не имею, что он делает. Вероятно, проблема с макетом. – camickr

+0

@camickr это был более увлекательный комментарий: p Также VerticalPanel является частью JMeter API. Я добавлю импорт – flakes

+0

@camickr Я просто заменил 'панель' на' JPanel panel = new JPanel(); panel.setLayout (новый BoxLayout (панель, BoxLayout.Y_AXIS)); и я вижу ту же проблему. – flakes

ответ

2

Я только что заменил панель панелью JPanel = новый JPanel();

Да, но мы не знаем, что делает AbstractSamplerGui. Это может иметь некоторые ограничения на ширину компонентов.

Я также не думаю, что могу найти корневую рамку с помощью SwingUtilities :: getRoot, потому что эта работа выполняется внутри конструктора для JPanel.

Вы можете попробовать добавить AncestorListener к своей панели. Событие ancestorAdded должно генерироваться при добавлении панели в видимый графический интерфейс. Затем вы сможете получить родительское окно, чтобы его можно было упаковать:

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

    Window window = SwingUtilities.windowForComponent(component); 

    window.pack(); 
} 
+0

Просто попробовал это и, к сожалению, это не исправить проблему. Я не уверен, что JMeter делает под капотом, чтобы вызвать такое поведение; возможно, упаковка не является фактической причиной моей проблемы ... Я продолжу расследование. Спасибо за ответ :) – flakes