Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Положение формы на экране? / 16 сообщений из 16, страница 1 из 1
12.06.2005, 13:58
    #33113584
Relaxxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Положение формы на экране?
Здраствуйте!
Такой вопрос, когда я создаю форму JFrame, я указываю ее расположение с помощью setLocation(), а если мне нужно чтобы появилась форма поцентру экрана, мне нужно самому писать функцию или есть готовая, если нужно самому писать, то как мне получить расрешение экрана??
...
Рейтинг: 0 / 0
12.06.2005, 16:57
    #33113680
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Положение формы на экране?
размеры экрана:

java.awt.Dimension dim = java.awt.Window.getToolkit().getScreenSize();

откуда получаем ширину и высоту:

dim.width, dim.height
...
Рейтинг: 0 / 0
12.06.2005, 19:50
    #33113756
Relaxxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Положение формы на экране?
а такой вопрос:
скажите если я использую awt, у меня приложение будет работать на всех платформах, а то я где-то читал, что awt в отличии от swing работает не на всех платформах???
...
Рейтинг: 0 / 0
12.06.2005, 20:04
    #33113761
Relaxxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Положение формы на экране?
Partisan M
я попробовал сделать так как вы посоветовали
Код: plaintext
java.awt.Dimension dim = java.awt.Window.getToolkit().getScreenSize();
но у меня компилятор ругнулся на getToolkit()
Код: plaintext
non- static  method getToolkit() cannot be referenced from a  static  context

Я испотлую Java 2 Platform Standard Edition Development Kit 5.0
и
jdk1.5.0_03

???
...
Рейтинг: 0 / 0
12.06.2005, 20:04
    #33113762
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Положение формы на экране?
AWT, как и SWING, входит в стандартный набор классов, поэтому будет работать везде, где можно установить J2SE. Более того, SWING использует для своей работы AWT. Но хотя в приведённом программном примере используются классы AWT, пример предназначен для SWING - просто в SWING-е не стали дублировать некоторые средства AWT.
...
Рейтинг: 0 / 0
12.06.2005, 20:44
    #33113776
Relaxxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Положение формы на экране?
так а почему же getToolkit() не работает???
...
Рейтинг: 0 / 0
12.06.2005, 20:47
    #33113780
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Положение формы на экране?
Сущность ошибки понятна из её описания. Вы вставили код в неподходящее место - в нём создаётся объект (dim), а вы вставили в статический класс. Это нельзя, да и какой смысл? Вам надо центрировать форму, значит подходящим местом может быть конструктор формы. Вот простейший программный пример (бОльшая часть кода сгенерирована автоматически NetBeans IDE, я только вставил строчки после примечания "центрируем форму на экране):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
/*
 * CenteredJFrame.java
 *
 * Created on 12 Июнь 2005 г., 20:36
 */

/**
 *
 * @author  Partisan
 */
 public   class  CenteredJFrame  extends  javax.swing.JFrame {
    
    /** Creates new form CenteredJFrame */
     public  CenteredJFrame() {
        initComponents();
        
        //центрируем форму на экране:
        java.awt.Dimension dim = getToolkit().getScreenSize();
         this .setLocation(dim.width/ 2  -  this .getWidth()/ 2 ,
                dim.height/ 2  -  this .getHeight()/ 2 );
       
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
     private   void  initComponents() {
        
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        pack();
    }
    // </editor-fold>                        
    
    /**
     * @param args the command line arguments
     */
     public   static   void  main(String args[]) {
        java.awt.EventQueue.invokeLater( new  Runnable() {
             public   void  run() {
                 new  CenteredJFrame().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify                     
    // End of variables declaration                   
    
}
...
Рейтинг: 0 / 0
12.06.2005, 20:49
    #33113784
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Положение формы на экране?
автора вы вставили в статический класс.

опечатка, имелся ввиду статический метод.
...
Рейтинг: 0 / 0
13.06.2005, 00:22
    #33113855
Relaxxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Положение формы на экране?
спасибо большое, я кстати и центрирую форму в конструкторе, и когда я написал
Код: plaintext
1.
2.
 import  java.awt.*;
...
Dimension dim = getToolkit().getScreenSize();
все отлично работает, большое спаибо

PS. можно еще один вопрос в догонку чтобы не открывать новый топик,
я с помощью setLocation(x, y), устанавливаю положение на экране, а как считать например ростояние сверху, я пробовал getLocation(Point rv), но как потом работать с этим поинтом я непонял! Можете показать маленький пример.

PPS. не пинайте сильно ногами, только начинаю, книги и доки читаю... но все равно хочется быстрее все освоить вот и задаю на форуме много ламерских вопросов...
...
Рейтинг: 0 / 0
13.06.2005, 01:44
    #33113873
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Положение формы на экране?
1)продолжаю отвечать на прежний вопрос
2)отвечаю на новый вопрос


1)Понял, почему у вас сначала не работало - вы вставили код с созданием объекта dim в функцию main (), которая static. Перемещение кода в конструктор решает проблему, но оно возможно только однократно. А что если захочется менять положение формы после её создания? (Пользователь оттащит куда-нибудь - тогда вернуть в центр, или сместить в желаемое место). Тогда конструктор неподходящее место. Убираем код оттуда и добавляем в класс формы CenteredJFrame (имя для примера) метод moveToCenter:

Код: plaintext
1.
2.
3.
4.
5.
6.
 public   void  moveToCenter() {
        //центрируем форму на экране:
        java.awt.Dimension dim = getToolkit().getScreenSize();
         this .setLocation(dim.width/ 2  -  this .getWidth()/ 2 ,
                dim.height/ 2  -  this .getHeight()/ 2 );
    }
теперь мы можем перемещать форму в любом месте программы, где существует объект формы, например, в main ():

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  public   static   void  main(String args[]) {
        java.awt.EventQueue.invokeLater( new  Runnable() {
             public   void  run() {
                CenteredJForm form =  new  CenteredJFrame();
                form.moveToCenter();
                form.setVisible(true);
            }
        });

тут нам пришлось добавить переменную form, чтобы вызвать moveToCenter(),которой не было в оригинальном примере. Это неважно, но чтоб было красивее, можно сделать, чтоб moveToCenter () возвращал ссылку на форму:
Код: plaintext
1.
2.
3.
4.
5.
6.
  public  CenteredJFrame moveToCenter() {
        //центрируем форму на экране:
        java.awt.Dimension dim = getToolkit().getScreenSize();
         this .setLocation(dim.width/ 2  -  this .getWidth()/ 2 ,
                dim.height/ 2  -  this .getHeight()/ 2 );
         return   this ;
    }

теперь можно переписать main () без новой переменной:

Код: plaintext
1.
2.
3.
4.
5.
6.
  public   static   void  main(String args[]) {
        java.awt.EventQueue.invokeLater( new  Runnable() {
             public   void  run() {
                 new  CenteredJFrame().moveToCenter().setVisible(true);
            }
        });
Это я сделал, как мне вздумалось, не настаиваю, что хорошо.


2) я удивлён. Заглядываем в документацию по JDK, ищем описание класса Point, и видим у него свойства x и y с очевидным смыслом. Надо смотреть документацию. Также, подключить её в IDE, чтоб выводились подсказки. Тогда например, если я напишу "Point p;"
а потом напишу "p." (с точкой после имени), то IDE выдаст окошко со списком методов и свойств, доступных для "p", т.е. в данном случае cвойств x и y.
...
Рейтинг: 0 / 0
13.06.2005, 12:40
    #33114086
люблю С++
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Положение формы на экране?
Partisan M1)Понял, почему у вас сначала не работало - вы вставили код с созданием объекта dim в функцию main (), которая static.

Они же ясно написали, что они вызывали, как вы писали, java.awt.Window.getToolkit().getScreenSize();, в то время как гетТулкит не статик-метод.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  public   static   void  main(String args[]) {
        java.awt.EventQueue.invokeLater( new  Runnable() {
             public   void  run() {
                CenteredJForm form =  new  CenteredJFrame();
                form.moveToCenter();
                form.setVisible(true);
            }
        });


использование invokeLater в данном коде не оправдано вообще никак.


это не важно, но чтоб было красивее, можно сделать, чтоб moveToCenter () возвращал ссылку на форму:

лучше убрать 256 штук this, дублирующих подразумеваемый префикс.


2) я удивлён.

содержимым хелпа? :)
...
Рейтинг: 0 / 0
13.06.2005, 13:14
    #33114122
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Положение формы на экране?
to люблю С++

мне кажется, вопрос отвечен, но отвечаю на ваши замечания


Они же ясно написали, что они вызывали, как вы писали, java.awt.Window.getToolkit().getScreenSize();, в то время как гетТулкит не статик-метод.

Я это и объяснил - очевидно, первоначально вызов getToolkit () был вставлен в main (),который static, потому и не работало. Я посоветовал перенести в конструктор или ввести дополнительный метод для класса формы, программный пример для обоих способов сам проверил.

Использование this - мало ли что подразумевается, я для примера написал как понятно.


использование invokeLater в данном коде не оправдано вообще никак.

А зачем его оправдывать, пусть себе используется. Я его в код не вставлял - он добавлен "мастером проектов" IDE netBeans, которая кстати имеет наилучший визуальный редактор для пользовательского интерфейса (хотя в данном примере обошёлся без него). Это - замечание для того, кто хочет поизучать SWING.


2) я удивлён.

содержимым хелпа? :)

тем, что человек не посмотрел в документацию по JDK. Если её нету, надо иметь - списать с сайта Sun.
...
Рейтинг: 0 / 0
13.06.2005, 14:41
    #33114231
люблю С++
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Положение формы на экране?
Partisan MЯ это и объяснил - очевидно, первоначально вызов getToolkit () был вставлен в main (),который static, потому и не работало.

Уважаемый ВЫ. Куда не вставь вызов java.awt.Window.getToolkit().getScreenSize();, будет исключение на этапе компиляции.
Меньше с нетБинсом играйтесь.


Использование this - мало ли что подразумевается, я для примера написал как понятно.

В интерфейсах вы тоже пишете public abstract у методов и public static final у аттрибутов?
Cнимаю шляпу перед вашим мастерством.




использование invokeLater в данном коде не оправдано вообще никак.

А зачем его оправдывать, пусть себе используется.

Точно.
Зачем писать
Код: plaintext
 x+= 1 ; 
?
Лучше написать
Код: plaintext
1.
2.
3.
4.
5.
 int  N =  100000 ;
 for  ( int  i= 0 ; i<N; i++){
   x = x + i;
}
x = x - (N*N-N- 2 )/ 2 ;    
Кому от этого бужет хуже, да?



Я его в код не вставлял - он добавлен "мастером проектов" IDE netBeans,

На этот форум код запостил тоже "мастер проектов" ?
Ладно один раз написать ерунду гениримую ИДЕ, но дублировать её 5 раз и подписывать, что так удобнее, после чего валить всё на бедный нетБинс...
Опять снимаю шляпу.


которая кстати имеет наилучший визуальный редактор для пользовательского интерфейса (хотя в данном примере обошёлся без него). Это - замечание для того, кто хочет поизучать SWING.

Sure. Пример человека обучившегося при помощи визуального редактора swing'у перед нами.
Отличная антиреклама :)
...
Рейтинг: 0 / 0
13.06.2005, 15:22
    #33114282
Relaxxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Положение формы на экране?
Большое всем спасибо за помощь... вопрос закрыт!
...
Рейтинг: 0 / 0
13.06.2005, 15:38
    #33114301
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Положение формы на экране?
to любящий С++

В вашем послании я вижу грубость, но что касается технический вопросов, то смысла не вижу. А точнее, его и нет. По-существу:


Уважаемый ВЫ. Куда не вставь вызов java.awt.Window.getToolkit().getScreenSize();, будет исключение на этапе компиляции.
Меньше с нетБинсом играйтесь.


Вы очевидно не осведомлены, что neBeans создаёт проектный файл в формате Ant. Который естестевенно может выполняться и без netBeans. Сл., если программа работает, то это не потому, что netBeans как-то тайно подправляет язык Java, а то, что вы написали про "исключение на этапе компиляции" - чушь. Ещё раз, чтоб понятнее: netBeans вызывает Ant. Ant вызывает комилятор. А компилятор компилирует и, в отличие от вас, не находит ошибки (что меня удовлетворяет).


В интерфейсах вы тоже пишете public abstract у методов и public static final у аттрибутов?
Cнимаю шляпу перед вашим мастерством.

вы видите в приведённых программных примерах интерфейсы? Не видите. На фига фантазируете. Насчёт моего мастерства: задали вопросю. Вы не ответили, поэтому пришлось мне ответить, даже если моё мастерство и не совершенно.


Ладно один раз написать ерунду гениримую ИДЕ, но дублировать её 5 раз и подписывать, что так удобнее, после чего валить всё на бедный нетБинс...

При чём тут вообще netBeans. Не нравится - составляйте программы хоть в Notepad, кому какое дело. Кстати, invokeLater, который почему-то вызвал у вас злобу, netBeans вставил правильно. Хоть в данном примере он не нужен (т.к. пример всего лишь показывает пустую форму), но если создавать более сложное приложение на основе этого каркаса, то понадобится. То есть, я одобряю работу netBeans. Я, кстати, не спрашиваю, для чего, по вашему мнению, служит invokeLater (не заинтересован в дискуссии - у меня есть хорошая книжка, где всё объяснено). Но вы могли бы удалить его вызов в вашей программе, если не нравится. Но приведённый код - это моя программа.

Заключение: участвуя в форумах, иногда приходится сталкиваться с подобными субъектами, чего не избежать, а сейчас я прекращаю дискуссию.
...
Рейтинг: 0 / 0
13.06.2005, 18:28
    #33114507
любящий С++
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Положение формы на экране?
Partisan M
В вашем послании я вижу грубость, но что касается технический вопросов, то смысла не вижу.

Я уже заметил, что вы смысл с трудом улавливаете :)



По-существу:

omg!!!



Вы очевидно не осведомлены, что neBeans создаёт проектный файл в формате Ant. Который естестевенно может выполняться и без netBeans. Сл., если программа работает, то это не потому, что netBeans как-то тайно подправляет язык Java, а то, что вы написали про "исключение на этапе компиляции" - чушь. Ещё раз, чтоб понятнее: netBeans вызывает Ant. Ant вызывает комилятор. А компилятор компилирует и, в отличие от вас, не находит ошибки (что меня удовлетворяет).

Любезный друг.
Напишите в каком вам хочется месте строку
Код: plaintext
1.
java.awt.Window.getToolkit().getScreenSize();
и попытайтесь скопилировать каким угодно способом ваш какой угодно код.
Вы получите ошибку компиляции.
С этим просто нужно смириться.
После этого прочитайте, что вы понаписали про аnt и скажите мне, как это связано со строкой кода, которую мы с вами обсуждаем уже не в одном сообщении.




В интерфейсах вы тоже пишете public abstract у методов и public static final у аттрибутов?
Cнимаю шляпу перед вашим мастерством.

вы видите в приведённых программных примерах интерфейсы? Не видите. На фига фантазируете.

Повторюсь. Использование this и public abstract в interfaces - это одна и тоже глупость с одним исключением: this нужно писать, когда поле класса перекрывается именем параметра и нужно получить доступ к этому полю.


Насчёт моего мастерства: задали вопросю. Вы не ответили, поэтому пришлось мне ответить, даже если моё мастерство и не совершенно.

Да разве я против, что вы ответили? Я просто уточнил потенциальные неточности.



Ладно один раз написать ерунду гениримую ИДЕ, но дублировать её 5 раз и подписывать, что так удобнее, после чего валить всё на бедный нетБинс...

[quot]
При чём тут вообще netBeans. Не нравится - составляйте программы хоть в Notepad, кому какое дело.

Нам вас процитировать, где чёрным по белому написано, что invoke это плод кодогенератора netBeans?
нетБинс тут именно при этом.


Кстати, invokeLater, который почему-то вызвал у вас злобу, netBeans вставил правильно. Хоть в данном примере он не нужен (т.к. пример всего лишь показывает пустую форму),

Батенька, если код не нужен, то даже если он "правильный" - то он вставлен он "не правильно".
Пример с циклом читали? Согласны, что цикл правильный, но ни кому не нужный?


но если создавать более сложное приложение на основе этого каркаса, то понадобится. То есть, я одобряю работу netBeans.

Мы видим, вы на нём даже женились бы если можно было :)


Я, кстати, не спрашиваю, для чего, по вашему мнению, служит invokeLater

Конечно, иначе мне пришлось бы писать: "я удивлён" (с)ПартизанМ.


(не заинтересован в дискуссии - у меня есть хорошая книжка, где всё объяснено). Но вы могли бы удалить его вызов в вашей программе, если не нравится.

Мы бы его там и не написали :)


Но приведённый код - это моя программа.

А перед этим говорили, что она не ваша, а сгенерённая нетБинсом, чем и оправдывали этот глупый кусок кода :)


Заключение: участвуя в форумах, иногда приходится сталкиваться с подобными субъектами, чего не избежать, а сейчас я прекращаю дискуссию.
"Подобными субъектами" - это вами? :)


Заключение: не обижайтесь, просто я очень люблю С++.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Положение формы на экране? / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]