2016-04-22 3 views
-1

Я пытаюсь добавить JPanel в другой JPanel и разместив его в определенном месте на первом JPanel. Я делаю это с setBounds(x, y, w, h). Теперь я знаю, что не должен этого делать, но мне нужен способ передвинуть его (как анимацию).JPanel setbounds

Проблема, которую я испытываю, заключается в том, что Y не работает. Если я делаю getBounds(), оно установлено на правильное значение, но оно не перемещается по экрану. У меня есть Layout, установленный на null.

Первый JPanel:

public WarehousePanel() 
{ 
    super(null); 

    gantries = new Gantry[5]; 

    for (int i = 0; i < gantries.length; i++) 
    { 
     gantries[i] = new Gantry(3); 
     add(gantries[i]); 
     System.out.println(gantries[i].getY()); 
     gantries[i].setBounds(15 * (i + 1), 100, 10, 50); 
     System.out.println(gantries[i].getBounds()); 
    } 
}' 

Второй JPanel:

public Gantry(int y) 
{ 
    this.y = y; 

    packageY = new ArrayList(); 

    setBackground(Color.red); 
    setPreferredSize(new Dimension(10, 50)); 
} 

Спасибо заранее.

+0

'gantries [i] .setBounds (15 * (i + 1), 100, 10, 50);' Y не меняется. – Tin

+0

Правильно, Y на экране по-прежнему кажется 5. – javaNoobsForever

+0

Я имел в виду, что я не вижу, что вы перемещаете координату Y. Также, если вы хотите увидеть анимацию, вам может потребоваться добавить задержку, например Thread.sleep (миллисекунды). Если вы не добавите задержку, вы увидите только последнее значение - вы не увидите изменение значений внутри цикла. Ваш экран только отображал jframe после цикла. – Tin

ответ

0

, возможно, рассмотрите вопрос об использовании без упаковки JInternalFrame? что будет делать то, что вы хотите, чтобы сделать с гораздо меньше суеты. Кроме того, обычно считается плохой идеей использовать setBounds вместо диспетчера компоновки.

Если вы абсолютно позитивно настроены так поступать, то уверены ли вы, что вы вызываете метод перетаскивания класса компонента as per spec?

Наконец, вы уверены, что размер родительского JPanel достаточно велик, чтобы разместить вызов setBounds на дочернем компоненте?

0

Правильно, Y на экране по-прежнему, как представляется, 5.

Это говорит мне, что вы все еще используете по умолчанию FlowLayout в течение панели.

Если значение getBounds() установлено в правильное значение, rk.

Да, но вы показываете значение сразу после назначения значения. Это вам ничего не скажет. Вам необходимо отобразить границы ПОСЛЕ того, как кадр виден. Создание видимого кадра вызовет диспетчер компоновки.

Итак, дважды проверьте, чтобы использовать нулевой макет.

Если это не поможет, разместите свой SSCCE, который демонстрирует проблему. Поэтому создайте JFrame и установите для макета значение null. Затем создайте JPanel, установите его границы и фон и добавьте панель в рамку. Докажите себе базовый код работает. Затем определите, что отличается от рабочего кода и вашего кода.

Смежные вопросы