я обнаружил, что при размещении 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 украшен, а другой нет, дает декорированную раму (зеленый цвет), который является меньшим, чем недекорированного один (в красном):
границы двух кадров являются такими же, как и ожидалось:
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]
Я не нашел причину этого.
'jDialog.setUndecorated (false);' должно быть *** перед *** 'jDialog.setLocation (новая точка (jFrame.getX(), jFrame.getY()));' –
BTW - это фрагмент кода, а не SSCCE. Добавьте все, что кто-то, исследуя проблему, должен запустить ее, не меняя ни одной строки кода (создавая определение класса, добавляя импорт и т. Д.). –
@AndrewThompson благодарит за комментарии. В исходном приложении (где эта проблема появилась) 'setUndecorated (true);' выполняется до 'setLocation (...)'. Это не имеет значения. Я отредактировал код и протестировал его, чтобы устранить любые сомнения. – c0der