Как точно получить координаты содержимого JFrame? - PullRequest
2 голосов
/ 20 ноября 2011

Это мой код JFrame:

public static int width = 800;
public static int height = 600;

public static void main(String[]args){
    JFrame frame= new JFrame("RETRO");
    frame.add(new Screen());

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(width,height);
    frame.setVisible(true);
    frame.setResizable(false);
}

В основном, когда я хочу, чтобы что-то переместилось к краю экрана, я должен добавить дополнительные пиксели для его работы (наверное, потомусам кадр вместо размера дисплея? Однако оригиналы работают нормально (x = 0, y = 0)).Пример:

public double getX(){
    if(x<0)
        x=0;
    if(x+getImage().getWidth(null)>Game.width-6)
        x=Game.width-6-getImage().getWidth(null);
    return x;
}

public double getY(){
    if(y<0)
        y=0;
    if(y+getImage().getHeight(null)>Game.height-26)
        y=Game.height-26-getImage().getHeight(null);
    return y;
}

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

Ответы [ 3 ]

3 голосов
/ 20 ноября 2011
  • Не устанавливайте размер кадра, установите предпочтительный размер содержимого.
  • Упакуйте рамку
  • Получить координаты в соответствии с положением в содержании

Как установить «предпочтительный размер» для содержимого? Я использую класс Screen (расширенный JPanel) для рендеринга.

screen.setPreferredSize(new Dimension (600,400));
frame.setContentPane(screen);
frame.pack();
// frame will now be the size it needs to display the contents 
// and the frame's own decorations (title bar etc.)
// ..now add a nice tweak.
frame.setMinimumSize(frame.getSize());
0 голосов
/ 20 ноября 2011

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

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

0 голосов
/ 20 ноября 2011

Кажется, вы хотите сделать что-то наподобие полноэкранного приложения.SetDecorated (false) JFrame покончит с заголовком и границами.setBounds делает размер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...