Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2017, 10:33   #1
GUI
 
Регистрация: 13.02.2017
Сообщений: 8
По умолчанию JScrollPane не отображается без layout

Доброго времени суток.

Ниже указанный код делает следующее: имеется класс MyCanvas внутри которого отрисовывается вся графика. MyCanvas добавляется в JScrollPane. Экземпляр JScrollPane добавляется на панель panel (экземпляр JPanel) которая уже затем добавляется во фрейм.


Код:
import java.awt.*;
import javax.swing.*;
import java.lang.reflect.InvocationTargetException;
 
public class MyScroll {
 
    public static void main(String[] args) {
        JScrollPane scrollPane = new JScrollPane(new MyCanvas(1000, 1000));
        scrollPane.setPreferredSize(new Dimension(300, 350));
 
        JPanel panel = new JPanel();/*На этой панели распологается панель
                                      инструментов и рабочая область. Также она
                                      используется для задания размера окна.*/
        panel.setPreferredSize(new Dimension(700, 700));
        panel.add(scrollPane);
 
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    JFrame window = new JFrame("Map Editor");
                    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    window.setResizable(false);
                    window.add(panel);
                    window.pack();
                    window.setLocationRelativeTo(null);
                    window.setVisible(true);
                }
            });
        } catch(InvocationTargetException | InterruptedException e) {
            e.printStackTrace();
        }
 
    }
    
 
 
    private static class MyCanvas extends JPanel {
 
    MyCanvas(int width, int height) {
        setLayout(null);
        setPreferredSize(new Dimension(width, height));
    }
 
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
    }
 
    }
 
}
Затем я пытаюсь задать координаты экземпляра JScrollPane относительно panel. Делаю это так: устанавливаю координаты экземпляра JScrollPane с помощью метода setLocation(100, 100) и убираю менеджер компоновки у panel с помощью setLayout(null). И в результате экземпляр JScrollPane перестает отрисовываться со всем содержимым. Пожалуйста помогите понять в чем причина.
GUI вне форума Ответить с цитированием
Старый 08.07.2017, 10:49   #2
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

...а зачем вы таким старым пользуетесь? Я вот такое даже и не знаю - уже учил яву, после выхода JavaFX:

http://docs.oracle.com/javafx/2/get_...et_started.htm
alexzk вне форума Ответить с цитированием
Старый 08.07.2017, 14:10   #3
GUI
 
Регистрация: 13.02.2017
Сообщений: 8
По умолчанию

Пробовал перенести на javaFX. Наверное я ещё плохо в нем разбираюсь, но кажется API у swing удобнее чем у javaFX. Например в ToolBar (javaFX) можно добавлять инструменты только через конструктор. Из-за множества подобных неприятных мелочей он проигрывает swing.
GUI вне форума Ответить с цитированием
Старый 08.07.2017, 20:35   #4
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от GUI Посмотреть сообщение
Пробовал перенести на javaFX. Наверное я ещё плохо в нем разбираюсь, но кажется API у swing удобнее чем у javaFX. Например в ToolBar (javaFX) можно добавлять инструменты только через конструктор. Из-за множества подобных неприятных мелочей он проигрывает swing.
Да ладно...
Код:
private void makeMainToolbar()
    {
        ToolBar toolBar = new ToolBar();
        toolBar.getItems().addAll(
                getActionButton("fileNewWad"),
                getActionButton("fileOpenWad"),
                getActionButton("fileSaveWad"),
                new Separator(Orientation.VERTICAL)

        );
        root().getChildren().addAll(toolBar);
    }
Или вот:
Код:
ToolBar right_tb = new ToolBar();
        right_tb.getItems().addAll(
                getActionButton("action_clean_level"),
                getActionButton("random_level"),
                getActionButton("copy_level"),
                getActionButton("paste_level"),
                buildColorSelector()
        );
....там коллекции-свойства везде, не совсем сразу понятно, но потом круто - списки, которые при изменении генерят события, как во всяких дельфи. В частности, длоя тулбара нада обращатся к свойству items (getItems() - это список всего, что там есть).


З.Ы. action там нет, не ищите ) - ето сам писал, чтоб 1 объект мог быть и меню и кнопкой и соотв. содержал 1 обработчик нажатия общий - не люблю копи-паст.

Последний раз редактировалось alexzk; 08.07.2017 в 21:22.
alexzk вне форума Ответить с цитированием
Старый 09.07.2017, 08:24   #5
GUI
 
Регистрация: 13.02.2017
Сообщений: 8
По умолчанию

Хм, и вправду - просто и удобно.
alexzk, скажите пожалуйста, знаете ли вы какие-нибудь русскоязычные ресурсы, где объясняются основные принципы работы javaFX и его отличия с этой стороны от swing. На английском находил, но с английским туговато.
GUI вне форума Ответить с цитированием
Старый 09.07.2017, 09:23   #6
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Нет, не знаю. У меня было туго 2 года после школы, потом привык - стал свободно говорить от прочтения доков.
alexzk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Layout элементов Lindemann66 Qt и кроссплатформенное программирование С/С++ 1 28.09.2011 14:11
Jpanel в JscrollPane Jakethefish Общие вопросы по Java, Java SE, Kotlin 0 15.11.2010 14:25
JScrollPane не отображает скроллы BleStaR Общие вопросы по Java, Java SE, Kotlin 2 20.09.2010 15:20
Box Layout. Ось по левому краю. cherw9!40k Общие вопросы по Java, Java SE, Kotlin 1 30.04.2010 14:09
Где в D2010/D2009 находятся Layout'ы? TwiX Софт 3 28.02.2010 22:57