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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
>  Как использовать совместно AWT и Swing? 
:(
    Опции темы
Гость_serge
Дата 18.4.2005, 10:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Как использовать совместно AWT и Swing?
Имеется апплет использующий AWT, но в Linux AWT-компоненты не умеют отображать русские буквы. Поностью переписывать апплет не хочется. После частичной замены AWT на Swing
возникаю следующие проблемы с JScrollPane (содежит Canvas, который периодически перерысовываеется используя двойную буферизацию):
- неправильно отрисовывает полосы прокрутки, если нужны обе, при этом вложенный объект при прокрутки может вылезать влево и вверх за пределы JScrollPane;
- неправильно определяет макимальные значения прокрутки при измнении размеров вложенного объекта при их изменении

  Вверх
batigoal
Дата 18.4.2005, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Касаемо совместного использования - по-моему, AWT и Swing можно комбинировать как угодно, тут проблем не должно быть. А насчет проблем - не знаю, может, код кинешь?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Гость_serge
Дата 18.4.2005, 16:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test extends WindowAdapter {
  Test () {
  }
  public void windowClosing (WindowEvent e) {
    Window w = e.getWindow();
    w.hide ();
    w.dispose ();
    System.exit (0);
  }
  public static void main (String[] args) {
    Test t = new Test();
    Frame f = new Frame ("test");
    f.addWindowListener (t);
    f.setSize (100,100);
    f.setLayout (new BorderLayout ());
    Panel north = new Panel ();
    f.add (north, BorderLayout.NORTH);
    JLabel l = new JLabel ("north");
    north.add (l);
    JScrollPane s = new JScrollPane ();
    f.add (s, BorderLayout.CENTER);
    Panel p2 = new Panel ();
    p2.setLayout (new GridLayout (10,10) );
    for (int i=0; i < 100; i++) {
      JLabel lab = new JLabel (" "+i);
      p2.add (lab);
    }
    s.getViewport().add (p2);
    f.pack ();
    f.setVisible (true);
  }
}

Для проверки нужна мышь с колесом.
Изменить размеры окна, чтобы нужны были обе полосы прокрутки - их не видно.
Прокрутить колесом вниз - появится горизонтальная полоса прокрутки, при этом панель north
будет невидима; прокрутить горизонтально - появится вторая полоса прокутки (если бы была панель left, она тоже бы затерлась)
  Вверх
batigoal
Дата 18.4.2005, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Да уж, более чем странно. Надо попробовать покопать...


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Domestic Cat
Дата 18.4.2005, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Вообще-то не советуется использовать вместе компоненты AWT и Свинга. Попробуй переписать все на чем-нибудь одном.


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

PM   Вверх
batigoal
Дата 18.4.2005, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Так ведь почти во всех случаях встречается:
Код

import javax.swing.*;
import java.awt.*;

Или ты имеешь в виду именно визуальные компоненты?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Domestic Cat
Дата 18.4.2005, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ага, речь о визуальных компонентах.


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

PM   Вверх
batigoal
Дата 18.4.2005, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Вот так, кажись, работает:
Код

import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Test extends WindowAdapter {
  Test () {
  }
  public void windowClosing (WindowEvent e) {
    Window w = e.getWindow();
    w.hide ();
    w.dispose ();
    System.exit (0);
  }
  public static void main (String[] args) {
    Test t = new Test();
    JFrame f = new JFrame ("test");
    JPanel mainPanel = new JPanel();
    f.setContentPane(mainPanel);
    f.addWindowListener (t);
    mainPanel.setSize (100,100);
    mainPanel.setLayout(new BorderLayout ());
    JPanel north = new JPanel ();
    mainPanel.add (north, BorderLayout.NORTH);
    JLabel l = new JLabel ("north");
    north.add (l);

    JPanel p2 = new JPanel();
    p2.setPreferredSize(new Dimension(200,200));
    p2.setLayout (new GridLayout (10,10) );
    for (int i=0; i < 100; i++) {
      JLabel lab = new JLabel (" "+i);
      p2.add (lab);
    }
    JScrollPane s = new JScrollPane (p2);
    mainPanel.add(s, BorderLayout.CENTER);

    f.pack ();
    f.setVisible (true);

  }
}



--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Гость_serge
Дата 19.4.2005, 10:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Конечно, если использовать только Swing компоненты, все будет работать. Этот пример - упрощение. У меня объявлен интефейс UIFactory, который создает либо AWT,
либо Swing компоненты. При старте апплет проверяет версию виртульной машины и выбирает нужную реализацию UIFactory. Но сам апплет остается java.applet.Applet, а не javax.swing.JApplet.
Какой аналог Canvas в Swing? JLabel c изображением?

  Вверх
Гость_serge
Дата 19.4.2005, 17:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Для того чтобы вставить Swing компонент в AWT-контейнер нужно использовать JRootPane. Обратного переходника видимо нет.
Код

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test extends WindowAdapter {
  Test () {
  }
  public void windowClosing (WindowEvent e) {
    Window w = e.getWindow();
    w.hide ();
    w.dispose ();
    System.exit (0);
  }
  public static void main (String[] args) {
    test t = new test();
    Frame f = new Frame ("test");
    JRootPane r = new JRootPane ();
    f.addWindowListener (t);
    f.setSize (300,300);
    f.setLayout (new BorderLayout ());
    f.add (r, BorderLayout.CENTER);
    r.setLayout (new BorderLayout ());
    JPanel n = new JPanel ();
    r.add (n, BorderLayout.NORTH);
    JPanel w = new JPanel ();
    r.add (w, BorderLayout.WEST);
    JLabel l = new JLabel ("north");
    n.add (l);
    JScrollPane s = new JScrollPane ();
    r.add (s, BorderLayout.CENTER);
    JPanel p = new JPanel ();
    p.setLayout (new GridLayout (10,10) );
    for (int i=0; i < 100; i++) {
      JLabel lab = new JLabel (" "+i);
      p.add (lab);
    }
    s.getViewport().add (p);
    f.pack ();
    f.setVisible (true);
  }
}


  Вверх
Domestic Cat
Дата 19.4.2005, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата
Какой аналог Canvas в Swing? JLabel c изображением?

JPanel


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

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0509 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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