2016-08-26 4 views
0

я обнаружил, что при размещении 2 подобных JFrames в том же месте:недекорированного JDialog/JFrame больше, чем декорированный один

import java.awt.Color; 
import java.awt.Point; 
import javax.swing.JFrame; 

public class Test{ 

    public static void main(String[] args) throws InterruptedException { 

     JFrame jFrame = new JFrame(); 
     jFrame.setSize(400,200); 
     jFrame.setUndecorated(true); 
     jFrame.setLocation(new Point(200,200)); 
     jFrame.getContentPane().setBackground(Color.RED); 
     jFrame.setVisible(true); 

     JFrame jFrame2 = new JFrame(); 
     jFrame2.setSize(400,200); 
     jFrame2.setUndecorated(false); 
     jFrame2.setLocation(new Point(200,200)); 
     jFrame2.getContentPane().setBackground(Color.GREEN); 
     jFrame2.setVisible(true); 
    } 
} 

Где один JFrame украшен, а другой нет, дает декорированную раму (зеленый цвет), который является меньшим, чем недекорированного один (в красном): enter image description here

границы двух кадров являются такими же, как и ожидалось:

JFrame 1 bounds java.awt.Rectangle [x = 200, y = 200, width = 400, height = 200]
JFrame 2 bounds java.awt.Rectangle [x = 200, y = 200, width = 400, height = 200]

Я не нашел причину этого.

+1

'jDialog.setUndecorated (false);' должно быть *** перед *** 'jDialog.setLocation (новая точка (jFrame.getX(), jFrame.getY()));' –

+0

BTW - это фрагмент кода, а не SSCCE. Добавьте все, что кто-то, исследуя проблему, должен запустить ее, не меняя ни одной строки кода (создавая определение класса, добавляя импорт и т. Д.). –

+0

@AndrewThompson благодарит за комментарии. В исходном приложении (где эта проблема появилась) 'setUndecorated (true);' выполняется до 'setLocation (...)'. Это не имеет значения. Я отредактировал код и протестировал его, чтобы устранить любые сомнения. – c0der

ответ

0

Я узнал, что вызывает декорированные и не украшенные JFrame или JDialog, чтобы иметь разный размер дисплея.
Это из-за вставок. Размер вставки (который может быть проверен с использованием jFrame.getInsets()) неизолированного окна равен 0, а размер его для украшенного окна -> 0.

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

  • Нет связанных вопросов^_^