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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить размер Canvas во Frame 
:(
    Опции темы
Dancer
Дата 23.5.2005, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



Создал свой класс унаследованный от java.awt.Frame как мне получить размер канвы, на которую могу выводить свою графику. То есть, как мне полуить размер Title и толщину рамок у этого фрейм объекта.

Заранее благодарен.


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
Royan
Дата 23.5.2005, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

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



Насколько я знаю стандартного метода возвращающего клиентскую область окна во Frame'е нет. Быть может твою задачу можно решить иначе? С какой целю тебе необходимо это знать. Если только выводить графику, то тебе это не нужно. Перегрузив метод paint, ты сразу получаешь координаты левого верхнего угла клиентской области, вот код, который скажет тебе больше моих слов.
Код

import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;

public class test01 extends Frame {
    public test01(){
        setSize(200, 400);        
        show();        
    }
    public static void main(String[] args) {
        test01 test = new test01();
    }
    public void paint (Graphics g){
        g.setColor(Color.YELLOW);
        g.fillRect(10, 100, 10, 10);
    }
}



--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Dancer
Дата 23.5.2005, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



Нет, мне именно нужно знать размер области, так как в эту область нужно будет выводить текст, в зависимости от того какая ширина, будет выведенно определеённое количество символов. Использовать JTextPanel или что-то наподобие нельзя.


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
Royan
Дата 23.5.2005, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

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



Дам хинт. Пихни во фрейм кнопку (в этот момент фрейм можно не показывать), сделай на нем pack. Получи размер кнопки (можно через frm.getComponent(0).getSize(), если ты уверен, что кнопка именно под 0 индексом), потом получи размер фрейма. Далее элементарная арифметика smile
Добавлено @ 18:20
Таким образом узнаешь размеры границ окна и заголовка, потом даже если размеры фрейма уменьшаться, можешь запросто пересчитать размеры клиентской области


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Royan
Дата 23.5.2005, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

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



Удивительно, оказывается есть такой чудо метод у Container'а - getInsets(). В доке написано:
Цитата
A Frame object, for example, has a top inset that corresponds to the height of the frame's title bar.


На практике:
Код

import java.awt.Frame;
import java.awt.Insets;

public class test01 extends Frame {
    public test01(){
        setSize(200, 400);
        Insets ins = getInsets();
        System.out.println(ins.toString());
        show();        
    }
    public static void main(String[] args) {
        test01 test = new test01();
        Frame f = new Frame("Hi");     
    }    
}

Выводится:
java.awt.Insets[top=0,left=0,bottom=0,right=0]
Почему???

Это сообщение отредактировал(а) Royan - 23.5.2005, 19:00


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Domestic Cat
Дата 23.5.2005, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Может, нужно сначала показать, а потом брать insets?


--------------------

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



c Insets уже пробывал, думал о нём с самого начала, но не до show() не после него, getInsets() выдаёт нули.
Нашёл одно стредство:
методе paint() сделать g.getClipBounds() это даст нам в общем то правильные результаты НО!!!!!, это будет лишь работать, если окно не ресайзится или он не перекрыто другими окнами.

Пример кода:
Код

//method in class extended of java.awt.Frame
public void paint(Graphics g) {
    Rectangle r = g.getClipBounds();
    int x, y, width, height;
    x = (int) r.getX();
    y = (int) r.getY();
    width = (int) r.getWidth();
    height = (int) r.getHeight();
    System.out.println("X= " +x + "\nY="+y);
    System.out.println("Width= " +width + "\nHeight="+height);

    g.setColor(Color.GREEN);
    g.fillRect(x,y,width,height);
}


возможно это и поможет, но есть ещё одна проблема. Как мне получать что окно в данный момент ресайзится, тогда можно было бы не перерисовывать его пока не будет мышка отжата. Как только кнопка мыши будет Released тогда и только тогда перерисовывать. Если ставить листенеры (MouseMotionListener и MouseListenr), то они отрабатывают лишь когда мышь находится в пользовательской области, но не реагируют когда мышь находится в области бордюра или title.



--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
skh
Дата 25.5.2005, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Уточни задачу пожалуйста.
Код

import javax.swing.JFrame;

public class SwingTest extends JFrame {
    SwingTest() {
        setTitle("Tut ti xoches vivodit grafiku i tekst???");
        setSize(150, 150);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        
        System.out.println("getBounds - " + getBounds());
        System.out.println("getSize - " + getSize());
        System.out.println("getInsets - " + getInsets());
        System.out.println("contentPane.getBounds - " + getContentPane().getBounds());
        // Dalshe ponyatno kak poschitat titleSize i canvasSize
    }
    
    public static void main(String[] args) {
        new SwingTest();
    } 
}

PM MAIL   Вверх
Dancer
Дата 26.5.2005, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



Задание следующее:
Программа должна показывать содержимое текстового файла в окне произвольного размера. Показываемый текст должен быть отформатирован по левому краю окна. Слова не помещающиеся на одной строке следует целиком переносить на следующую строку; слова не помещающиеся на одну строку вообще следует разделять так, чтобы на исходной строке осталось максимальное количество символов. Программа должна обрабатывать переводы строк.
Текст должен показываться любым пропорциональным шрифтом. Каждая пара слов должна показываться фонтом, размер которго будет больше или меньше, чем размер фонта для предыдущей пары. например 9-12-9-12
Программа должна быть устроена так, чтобы при простой перерисовке окна текст не переформатировался. Под переформатированием понимается процесс разбиения текста на части, которым присваиваются определённые визульные характеристики.
По нажатию клавиш Up и Down программа должна осуществлять построчный scroll.
Словами в исходном тексте считаются символы, ограниченные пробелами и переводами строк.
Программу следует организовать на языке Java без использования компоненты JTextPane, а так же других компонент библиотеки Swing и AWT, выполняющих форматирование.

getInsets() у меня даёт правильные размеры только лишь при старте и более их не меняет в процессе ресайза окна.
Код, который я приводил ранее показывает, что в общем то рзмеры бордюров и title меняются по сравнению с первоначальными, если мы развернём окно на весь экран. (Хотя может быть эту ситуацию стоит орбаботать как частную?)


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

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

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


 




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


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

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