Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Простое обычное окошко 
V
    Опции темы
Cheese
Дата 19.3.2009, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 25.11.2007

Репутация: нет
Всего: нет



Господа, я тут столкнулся с какой-то глупостью. Мне надо вывести через Swing окно, чтобы
- Были известны размеры рабочей области (то есть "внутренне содержимое", без рамок и украшений)
- Нельзя было менять размеры.
- Работало и под Linux и под Windows.
Суть понятна - надо кинуть на форму JPanel нужного размера, а потом применить pack() и окно само сожмётся, но не работает, каналья! Точнее, результаты из под разных ОС различаются, размеры окна не те.

Например, вот этот код выдаёт нужные результаты под виндой, а в линуксе окошко прямоугольное.
Код

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

public class Game
{
public static void main(String[]args)
{
    JFrame frame = new JFrame("Sample");
    JPanel panel = new JPanel();
    
    panel.setPreferredSize(new Dimension(200,200));    
    frame.getContentPane().add(panel);
    
    frame.pack();
    frame.setResizable(false);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}


Что делать, люди?

PM MAIL   Вверх
frodo5
Дата 20.3.2009, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 17.3.2009

Репутация: нет
Всего: нет



frame.setSize(200,200) религия не позволяет?
PM MAIL   Вверх
Connie
Дата 20.3.2009, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 382
Регистрация: 12.8.2008

Репутация: 8
Всего: 9



Код
frame.setSize(200,200) религия не позволяет? 
И pack() не использовать.
PM MAIL WWW   Вверх
Turinets
Дата 20.3.2009, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 24.2.2009

Репутация: нет
Всего: нет



Попробуй так:
Код
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class AlfaFrame
{
public static void main(String[]args)
{
    JFrame frame = new JFrame("Sample");
    JPanel panel = new JPanel(){
        };

    panel.setPreferredSize(new Dimension(200,200));
    frame.getContentPane().add(panel);
    

   /// frame.pack();
    frame.setResizable(false);
    
    frame.pack();   //!!!!
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    System.out.println("Size "+panel.getSize().getWidth()+"  "+panel.getSize().getHeight());
    System.out.println("Size "+frame.getContentPane().getSize().getWidth()+"  "+frame.getContentPane().getSize().getHeight());
}
}


Т.е. если вызвать pack() после SetResizable(), вроде всё нормально получается.


А насчёт использовать setSize(), ну так изменять надо не размеры понели, а размеры фрейма. Помоему Вы не правильно поняли задачу. Нужна рабочая область фиксированного размера, и нужен фрейм, который будет подогнан под эту область. Именно pack() она и решается. Так что правильная вещь - религия.

Это сообщение отредактировал(а) Turinets - 20.3.2009, 10:45
PM MAIL   Вверх
Turinets
Дата 20.3.2009, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 24.2.2009

Репутация: нет
Всего: нет



Хотя на всякий случай можно проверить дело так:
Код

if(panel.getSize().getWidth()!=200){
      panel.setPreferredSize(new Dimension(400-(int)(panel.getSize().getWidth()),400-(int)(panel.getSize().getHeight())));
    pack();
}


Т.е. сделать один pack, если размеры получились не те, то вычислить попровку и задать новые размеры с последующим pack().
PM MAIL   Вверх
Cheese
Дата 20.3.2009, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 25.11.2007

Репутация: нет
Всего: нет



Не работает, однако. В линуксе окно вытягивается вширь.
PM MAIL   Вверх
Turinets
Дата 20.3.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 24.2.2009

Репутация: нет
Всего: нет



А можешь рассказать что в линухе происходит?
Какие размеры получается у панели\ фрейма?
Может просто у фрейма минимальные размеры есть скажем 300.100 поэтому и получается размеры 300,200. Скажи что происходит.
1) какие размеры при задании размера 200,200.
2) какие размеры при задании размера 300,300
.. вобщем как меняется ситуация при изменении размера.
PM MAIL   Вверх
Cheese
Дата 20.3.2009, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 25.11.2007

Репутация: нет
Всего: нет



Я сам не понимаю толком, как там всё получается. В линуксе окно вытянуто по вертикали, пикселей на 30, панелька тоже почему-то вытянута.
PM MAIL   Вверх
Turinets
Дата 20.3.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 24.2.2009

Репутация: нет
Всего: нет



Размеры можешь сказать?

И даже спрасить стесняюсь: какое разрешение в линухе у тебя? может там масштаб (dx/dy) иной?

Это сообщение отредактировал(а) Turinets - 20.3.2009, 17:51
PM MAIL   Вверх
Connie
Дата 20.3.2009, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 382
Регистрация: 12.8.2008

Репутация: 8
Всего: 9



Вот только что под linux сделал
Код

public class Main extends JFrame {
/**
*
*/


    public Main() {
        JPanel pane = new JPanel();
        pane.setPreferredSize(new Dimension(150,150));
        pane.setBorder(BorderFactory.createLineBorder(Color.BLUE));
        add(pane);
        pack();
       setResizable(false);//забыл
    }

    public static void main(String[] args) {
        Main mf = new Main();
        mf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mf.setVisible(true);

    }

}


Это сообщение отредактировал(а) Connie - 20.3.2009, 20:46
PM MAIL WWW   Вверх
Turinets
Дата 21.3.2009, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 24.2.2009

Репутация: нет
Всего: нет



А чем этот код отличается от предыдущего? Или это намер, что у автора Линукс какой-то не такой?(Точнее Java на нем).

У меня под виндой такая фигня была:
если ракать после setResizable(false), то размеры получается 200, 200.
А если до, то 202, 202 (т.е. на 2 пиксела больше).
PM MAIL   Вверх
Connie
Дата 21.3.2009, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 382
Регистрация: 12.8.2008

Репутация: 8
Всего: 9



Цитата(Turinets @ 21.3.2009,  08:14)
А чем этот код отличается от предыдущего? Или это намер, что у автора Линукс какой-то не такой?(Точнее Java на нем).

У меня под виндой такая фигня была:
если ракать после setResizable(false), то размеры получается 200, 200.
А если до, то 202, 202 (т.е. на 2 пиксела больше).

Ничем, и мой и пример выше дают одинаковые результаты и перестановка pack не меняет размер
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0814 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.