Подтвердить что ты не робот

Что такое setBounds и как его использовать?

Я не могу найти что-либо на setBounds, для чего он нужен, или какова его функция. Может ли кто-нибудь меня уладить? Большое спасибо!

4b9b3361

Ответ 1

Вы можете использовать setBounds(x, y, width, height), чтобы указать положение и размер компонента GUI, если вы установите layout на null. Тогда (x, y) является координатой верхнего левого угла этой компоненты.

Ответ 2

setBounds используется для определения ограничивающего прямоугольника компонента. Это включает в себя положение и размер.

Используется в нескольких местах в рамках.

  • Он используется менеджером компоновки для определения положения и размера компонента в нем родительского контейнера.
  • Он используется подсистемой краски для определения границ отсечения при рисовании компонента.

По большей части вы никогда не должны называть его. Вместо этого вы должны использовать соответствующие менеджеры макетов и дать им возможность определить лучший способ предоставить информацию этому методу.

Ответ 3

Это метод класса java.awt.Component. Он используется для установки положения и размера компонента:

setBounds

public void setBounds(int x,
                  int y,
                  int width,
                  int height) Moves and resizes this component. The new location of the top-left corner is specified by x and y, and

новый размер определяется шириной и высотой. Параметры:

  • x - новая x-координата этого компонента
  • y - новая y-координата этого компонента
  • width - новая ширина этого компонента
  • height - новая высота этого компонента

x и y, как указано выше, соответствуют верхнему левому углу в большинстве (всех?) случаев.

Это ярлык для setLocation и setSize.

Это обычно работает только в том случае, если диспетчер компоновки/компоновки отсутствует, т.е. null.

Ответ 4

Есть ответ от @hexafraction, он указал, что x и y - верхний правый угол, который неправильный, это верхний левый угол.

Я также предоставил источник, пожалуйста, проверьте его.

public void setBounds(int x,
             int y,
             int width,
             int height)

Перемещает и изменяет размер этого компонента. Новое расположение верхнего левого угла определяется x и y, а новый размер определяется шириной и высотой. Этот метод изменяет информацию, связанную с компоновкой, и, следовательно, делает недействительной иерархию компонентов.

Параметры:

x - новая x-координата этого компонента

y - новая y-координата этой компоненты

width - новая ширина этого компонента

height - новая высота этого компонента

источник: - setBounds

Ответ 5

Собственно, компонент Swing имеет несколько измерений, например:

  • текущий размер - setSize() и setBounds() устанавливает этот
  • минимальный размер - setMinimumSize() устанавливает этот
  • предпочтительный размер - setPerferredSize() устанавливает этот
  • максимальный размер - setMaximumSize() устанавливает это.

SetBounds - это ярлык для установки текущего размера и расположения виджета, если вы не используете диспетчер компоновки.

Если вы используете диспетчер компоновки, менеджер раскладки должен выложить свои компоненты с учетом выбранного вами размера и убедиться, что comonent никогда не становится меньше его минимального размера или больше его максимального размера.

В этом случае layoutManager вызовет setSize (или setBounds), и вы не сможете реально управлять позицией или размером компонента.

Весь смысл использования диспетчера компоновки состоит в том, чтобы иметь независимый от платформы и размер окна способ компоновки ваших компонентов автоматически, поэтому вы не ожидаете вызывать setSize из вашего кода.

(Личный комментарий: есть ошибочные менеджеры макетов, я лично их ненавижу и откатываю, что обеспечивает гибкость MigLayout без кривой обучения.)

Ответ 6

Как работает интерфейс Java Swing UI, для каждого JPanel всегда существует LayoutManager, который определяет, где именно разместить ваши компоненты. Каждый менеджер макетов работает по-разному, поэтому, если вы используете, например, BorderLayout, setBounds() не используется LayoutManager, вместо этого размещение компонентов определяется по восточному, западному, южному, северному, центральному.

Для NullLayoutManager (если вы использовали new JPanel(null)), каждый компонент должен иметь координату x и y. Stupid Sidenote: если ваш пользовательский интерфейс будет трехмерным, также будет координата z.

Итак, с помощью public void Component.setBounds(int x, int y, int width, int height) вы указываете, где находится ваш компонент, и сколько пикселей оно велико и высоко.

Вот пример:

import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class JTableInNullLayout
{
  public static void main(String[] argv) throws Exception {

      JPanel panel = new JPanel(null);

      JLabel helloLabel = new JLabel("Hello world!");
      helloLabel.setBounds( 10, 50, 60, 20 ); // x, y, width, height
      panel.add(helloLabel);

      JFrame frame = new JFrame();
      frame.add(panel);
      frame.setPreferredSize( new Dimension(200,200));
      frame.pack();
      frame.setVisible(true);
  }
}

Ответ 7

здесь короткий абзац из этой статьи Как создавать фреймы (основные окна) - Учебники Java - Oracle, который объясняет, что метод setBounds делает в дополнение к некоторым другим подобным методам:

Метод пакета определяет размер кадра так, чтобы все его содержимое находилось на уровне или превышало их предпочтительные размеры. Альтернативой pack является установка размера фрейма явным путем вызова setSize или setBounds (который также устанавливает местоположение фрейма). В общем случае использование пакета предпочтительнее вызова setSize, поскольку пакет оставляет диспетчер компоновки фреймов, отвечающий за размер кадра, а менеджеры макетов хорошо подходят для зависимостей платформы и других факторов, влияющих на размер компонента.

параметры setBounds: (int x, int y, int width, int height) x и y определяют положение/местоположение, а ширина и высота определяют размер/размер кадра.