Удаление границы JFrame? - PullRequest
       59

Удаление границы JFrame?

0 голосов
/ 17 апреля 2020

У меня есть Java Swing GUI, и все в моем JFrame смещено на несколько пикселей. На MacOS мне пришлось сместить все на 12 пикселей вниз, чтобы учесть это. На Windows все смещено влево и вниз. Я обнаружил, что

setUndecorated(true);

удаляет границу JFrame (которая, как я подозреваю, является причиной моих проблем), но также удаляет строку заголовка. Есть ли способ, которым я могу удалить границу JFrame (или какой-нибудь другой вариант, чтобы убедиться, что все по центру) и при этом сохранить строку заголовка? Мне нужна строка заголовка, чтобы я мог перемещать JFrame и иметь функции максимизации / минимизации / закрытия.

Кроме того, макет имеет значение null в случае, если это имеет значение. (Все, что я делаю, основано на пикселях, поэтому я не могу установить для него ничего другого).

Спасибо.

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

Причина, по которой вы добавляете 12px, заключается в том, что она потребляется заголовком и границей. Если вы используете setUndecorated(true), вы потеряете строку заголовка, и вам придется реализовать addWindowListener, чтобы добавить изменение местоположения приложения. Лучший способ сделать это:

Class Main{
   public static void main(String[] args){
      //JFrame
      JFrame frame = new JFrame();

      //Create a Main Panel and setPreferred Size and not set Size or set Bound
      JPanel mainPanel = new JPanel(); //You value down
      mainPanel.setPrefferedSize(new Dimension(x, y));
      frame.add(mainPanel);

      //and then in last add
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      //the pack method help you to setSize of the JFrame According to the             
      //Component size
      frame.pack();
      frame.setVisible(true);
   }
}
0 голосов
/ 18 апреля 2020

Я нашел решение после Googling немного больше. Вызов

getContentPane().setPreferredSize(...)
pack();

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

Таким образом, вы можете сохранить заголовок и все обычные функции окна JFrame, которые в противном случае вы потеряли бы с помощью setUndecorated (true);.

...