Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Масштабирование объектов в swing / 15 сообщений из 15, страница 1 из 1
02.02.2019, 11:02
    #39768629
JDS
JDS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование объектов в swing
Всем привет!
Вопрос возможно, простой, но ответ не нашел пока.
Вывел комп на телек, разрешение 4096*2160.
Сама операционка показывает нормально, сама IDE (JDeveloper) работает нормально.
Swing-формы и компоненты в дизайне IDE тоже отображаются нормально.
Запускаю проект со swing-формами, все формы микроскопические, кнопки микроскопические и надписи на них соответственно тоже. Пробовал менять разрешение в операционке - бесполезно (в телеке оно похоже не меняется или не нашел), но суть, что все остальное отображается нормально.
Этот же проект запускаешь на обычном мониторе (на котором изначально делался проектик и на аналогичных мониторах), все отображается корректно.
...
Рейтинг: 0 / 0
02.02.2019, 11:33
    #39768636
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование объектов в swing
JDS,

Скрины где?
...
Рейтинг: 0 / 0
02.02.2019, 13:06
    #39768650
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование объектов в swing
Swing обычно имеет несколько Look and Feel-s. Поробуй попереключать их.

Как тут.
https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html

Да и скрины-бы не помешали. Предположительно swing в том Look&Feel использует растровую графику для иконок
для очень высокого разрешения нет подходящей картинки в ресурсах.
...
Рейтинг: 0 / 0
02.02.2019, 16:14
    #39768693
alex55555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование объектов в swing
JDSВывел комп на телек, разрешение 4096*2160.
Swing рисует "как есть", то есть не масштабирует. Он изначально требует размер, который программист задаёт где-то в программе, либо по дефолту имеется в JVM, как например коэффициент масштабирования для шрифтов. Поэтому на мониторе высотой 1024 точки формочка, например, будет пол-экрана высотой, а на мониторе 2048 та же формочка будет те же 512 точек, то есть четверть экрана высотой.

Гуглите на тему масштабирования хотя бы шрифтов, так хотя бы читабельнее будет. Где-то в JVM есть коэффициент, на который домножается логический размер шрифта, выбранный программистом, вот этот коэффициент наверняка можно поправить, но я сам не изучал эти глубины.
...
Рейтинг: 0 / 0
02.02.2019, 17:04
    #39768707
irbis_al
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование объектов в swing
Petro123JDS,

Скрины где?

Ну вообще-то не скрины а код более нужен...
Например в swing очень важны правило компоновки layout.
И о них надо почитать.
И "с дуру" навскидку наваять не получится.
По идее у автора должен быть BorderLayout ,он задает Типа Цент Север Юг ,Восток Запад.
В центр BorderLayout например кладем другой laypout FlowLayout...(Это горизонтальная комплновка)
И если на этот flowlayout накидать кнопок,- у вас оно будет масштабироваться.
...
Рейтинг: 0 / 0
02.02.2019, 17:11
    #39768709
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование объектов в swing
Автор же пишет. Кнопки - микроскопические.

Что тебе даст layout в этом случае?
...
Рейтинг: 0 / 0
02.02.2019, 19:49
    #39768737
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование объектов в swing
irbis_al,
Вместо анализа автора, ты анализируешь зачем мне скрины. Непродуктивно... Контрпродуктивно.
...
Рейтинг: 0 / 0
03.02.2019, 01:03
    #39768803
JDS
JDS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование объектов в swing
Скрин и код простого примера:
Код: java
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.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
package client;

/**
 *
 * @author User
 */
public class NewJFrame extends javax.swing.JFrame {

    /** Creates new form NewJFrame */
    public NewJFrame() {
        initComponents();
    }

    /** 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.
     */
    @SuppressWarnings("unchecked")
    private void initComponents() {//GEN-BEGIN:initComponents

        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setMinimumSize(new java.awt.Dimension(700, 700));

        jButton1.setText("jButton1");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(256, 256, 256)
                .addComponent(jButton1)
                .addContainerGap(89, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(89, 89, 89)
                .addComponent(jButton1)
                .addContainerGap(44, Short.MAX_VALUE))
        );

        jButton1.getAccessibleContext().setAccessibleDescription("");

        pack();
    }//GEN-END:initComponents

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing
                                                                   .UIManager
                                                                   .getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing
                         .UIManager
                         .setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util
                .logging
                .Logger
                .getLogger(NewJFrame.class.getName())
                .log(java.util
                         .logging
                         .Level
                         .SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util
                .logging
                .Logger
                .getLogger(NewJFrame.class.getName())
                .log(java.util
                         .logging
                         .Level
                         .SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util
                .logging
                .Logger
                .getLogger(NewJFrame.class.getName())
                .log(java.util
                         .logging
                         .Level
                         .SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util
                .logging
                .Logger
                .getLogger(NewJFrame.class.getName())
                .log(java.util
                         .logging
                         .Level
                         .SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt
            .EventQueue
            .invokeLater(new Runnable() {
                public void run() {
                    new NewJFrame().setVisible(true);
                }
            });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    // End of variables declaration//GEN-END:variables

}


На скрине под единичкой - как видно в дизайне IDE, под двойкой - как выглядит запущенная формочка с кнопкой.
При этом если в IDE по правой кнопке на основной форме Preview Design (как бы предпросмотр), то кнопка масштабируется нормально.

Менять Layout пробовал, не помогло или что не так делал.

Look and Feel посмотрел.
Пробовал и вообще убрать кусок с L&F, который по дефолту вставляется, в main,
Пробовал вместо этого куска getSystemLookAndFeelClassName и getCrossPlatformLookAndFeelClassName
плюс какие-то темы/скины (metal и тд), эффекта не дало.
...
Рейтинг: 0 / 0
03.02.2019, 01:13
    #39768805
JDS
JDS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование объектов в swing
В тестовом примере убрал выход из цикла и кнопка в примере отобразилась уже нормально при запуске:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing
                                                                   .UIManager
                                                                   .getInstalledLookAndFeels()) {
              //  if ("Nimbus".equals(info.getName())) {
                    javax.swing
                         .UIManager
                         .setLookAndFeel(info.getClassName());
            //        break;
              //  }
            }
        }


Но в рабочем приложении это снова помогло только частично: кнопки, текстовые поля и шрифт в них по-прежнему мелкие, отмасштабировались только скроллбары в JList (при этом шрифт в них же остался мелкий)
...
Рейтинг: 0 / 0
03.02.2019, 01:35
    #39768807
JDS
JDS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование объектов в swing
Дальше. Заходим в свойства например JList.
Идем в шрифт. Там выбираем галку "Derive the font from the default font" и выставляем галку "Relative" и регулируя параметр рядом (с плюсиком) т.о. вроде бы шрифт можно довести до нужного вида.

Но. Например квадратик чекбокса при этом будет все равно микроскопический, а рядом с ним будет надпись большими буквами.
Или например кнопка все равно мелкая, а т.к. шрифт в ней большой, надпись не видно.

То есть пока нормального решения нет.
Не понятно, почему в тестовом примере кнопка все-таки отмасштабировалась, а в рабочем с этим же куском L&F - нет.
...
Рейтинг: 0 / 0
03.02.2019, 01:46
    #39768809
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование объектов в swing
Посмотри как тут https://superuser.com/questions/988379/how-do-i-run-java-apps-upscaled-on-a-high-dpi-display

Может поможет. Еще имеет смысл наверное исследовать JavaFx. Фреймворк более современный. И возможно
дефекты hi-res там уже обсуждались и фиксились.
...
Рейтинг: 0 / 0
03.02.2019, 11:05
    #39768841
irbis_al
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование объектов в swing
JDS,
Вам надо разобраться с layout
У Вас GroupLayout Его алгоритм компоновки совсем не тот.
https://docs.oracle.com/javase/tutorial/uiswing/layout/group.html
И для кроссплатформенной разработки используется нечасто именно из-за сложности анализа экрана.(ведь это может быть в линуксе и на маке в любом разрешении)

Или же константы компоновки GroupLayout должны быть не хардкондные а в зависимости от разрешения экрана.
Умножаемые на коэффициент начального вашего экрана где всё нормально на результат деления разрешения текущего экрана.

Я сам наступил на эти грабли Jdeveloper,он вроде делает визуализирование,и кажется что всё нормально...а на самом деле нет...Надо изучать фундаментально алгоритм компоновки layout...
И делать всё с пониманием.
В том примере что я вам рассказал выше ,-контролы ,что на лайоте(BorderLayout+FlowLayout+JButton) будут масштабироваться в соответствии с экраном.(лайот становится шире и контрол на нем шире)
...
Рейтинг: 0 / 0
03.02.2019, 12:26
    #39768861
JDS
JDS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование объектов в swing
irbis_al, возможно, но пока не уверен, что в layout дело. Нужен бы рабочий простой пример. Если выставляю BorderLayout, то "контрол" всю площадь парента похоже. Но тогда надо под каждую кнопку класть свой парент (который тоже надо масштабировать)? Не что-то не то.

myton, спасибо, почитал, попробовал поменять свойство на экзешниках явы - не помогло. Попробовал как там пишут поставить яву постарше, взял 11.2. Тут уже другие грабли. А именно. Не выходит нормально задеплоить в jar этот проектик (при запуске jar-а говорит, что не может инициализировать основной класс, хотя указывал его при создании профиля для деплоя).
Еще вариант попробовать девелоперу указать, чтобы он компилил через новую яву, как это можно было делать в нетбинзе например, но в jdeveloper не нашел как. Т.е. с явой посвежее пока не вышло.
...
Рейтинг: 0 / 0
03.02.2019, 12:40
    #39768862
irbis_al
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование объектов в swing
JDSirbis_al, возможно, но пока не уверен, что в layout дело. Нужен бы рабочий простой пример. Если выставляю BorderLayout, то "контрол" всю площадь парента похоже. Но тогда надо под каждую кнопку класть свой парент (который тоже надо масштабировать)? Не что-то не то.

myton, спасибо, почитал, попробовал поменять свойство на экзешниках явы - не помогло. Попробовал как там пишут поставить яву постарше, взял 11.2. Тут уже другие грабли. А именно. Не выходит нормально задеплоить в jar этот проектик (при запуске jar-а говорит, что не может инициализировать основной класс, хотя указывал его при создании профиля для деплоя).
Еще вариант попробовать девелоперу указать, чтобы он компилил через новую яву, как это можно было делать в нетбинзе например, но в jdeveloper не нашел как. Т.е. с явой посвежее пока не вышло.

Вы можете посмотреть примеры в OpenSource ИС...Надо только импортировать образ VirtualBox(Надо иметь 40g для разворачивания)
и сразу прямо в Jdeveloper можно смотреть.
http://www.cis-pos.com/apex/f?p=116:43
...
Рейтинг: 0 / 0
03.02.2019, 13:07
    #39768871
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование объектов в swing
JDSПопробовал как там пишут поставить яву постарше, взял 11.2. Тут уже другие грабли. А именно. Не выходит нормально задеплоить в jar этот проектик (при запуске jar-а говорит, что не может инициализировать основной класс, хотя указывал его при создании профиля для деплоя).
Еще вариант попробовать девелоперу указать, чтобы он компилил через новую яву, как это можно было делать в нетбинзе например, но в jdeveloper не нашел как. Т.е. с явой посвежее пока не вышло.
Не надо ставить новую джаву. 99% это путь в никуда т.к. библиотека Swing - морально устарела.
И ее практически не развивают.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Масштабирование объектов в swing / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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