Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
6 / 6 / 0
Регистрация: 17.08.2017
Сообщений: 141

Некорректно отрисовывается графический интерфейс

24.08.2018, 19:53. Показов 704. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Создаю игру, содержащую пока четыре java-класса. При запуске стартовая страница, код которой приведён ниже, отображается как показывают картинки 1 и 3. Должна - как на картинке №2. Мне хочется понять в чём проблема, причём применительно не только к конкретному случаю, а вообще, чтобы не допускать подобных ошибок в будущем. В случае необходимости могу выложить код остальных java-классов. Пока я этого делать не стал, так как всё вместе составляет примерно 1000 строчек.

И ещё вопрос про этот же код: все компоненты я выставляю по горизонтали по центру, а они всё равно сдвинуты несколько вправо. Что я криво делаю, как правильно?

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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
public class MyStart extends JFrame implements ActionListener {
    private static JFrame f;
    private static JMenuBar menuBar = new JMenuBar();
    private static JMenu file = new JMenu("Файл"), help = new JMenu("Справка");
    private static JMenuItem newTest = new JMenuItem("Новый тест"), open = new JMenuItem("Открыть попытку"),
            save = new JMenuItem("Сохранить тест"), exit = new JMenuItem("Выход"),
            reiting = new JMenuItem("Статистика игрока"), rights = new JMenuItem("Правила игры"),
            about = new JMenuItem("О программе");
 
    private static String[] dataR = {"География", "История", "Литература"};
    private static String[] geographyT = {"Общие вопросы", "Европа", "Северная Америка", "Южная Америка"};
    private static String[] historyT = {"Общие вопросы", "Россия, век XVI", "Россия, век XVII", "Россия, век XVIII"};
    private static String[] groundT = {"По-проще", "По-сложнее"};
 
    private static JPanel p = new JPanel();
    private static JButton gotovo = new JButton("Готово");
    private static JLabel label = new JLabel("Добро пожаловать"), r = new JLabel("Выберите раздел: "),
                    t = new JLabel("Выберите тему: "), g = new JLabel("Выберите степень сложности: ");
    private static JComboBox razdel = new JComboBox(dataR), tema = new JComboBox(), ground = new JComboBox(groundT);
    private static Font textButton = new Font("Arial", Font.ITALIC, 14);
    /*
    Методы класса
     */
    private static void start(JFrame frame) {
        //Меню
        frame.setJMenuBar(menuBar);
        menuBar.add(file);
        menuBar.add(help);
        file.add(newTest);
        file.add(open);
        file.add(save);
        file.add(exit);
        help.add(reiting);
        help.add(rights);
        help.add(about);
        p.repaint();
        //Создаём шрифты
        Font text = new Font("Arial", Font.ITALIC, 17);
 
        //Создаём панели
        p.setLayout(null);
        p.setBackground(Color.GREEN);
 
        //
        label.setOpaque(true);
        label.setBackground(Color.YELLOW);
        label.setHorizontalAlignment(SwingConstants.CENTER);
        label.setBounds(100,40,500, 100);
 
        r.setBounds(150, 200, 250, 40);
        r.setBackground(Color.YELLOW);
        r.setOpaque(false);
        t.setBounds(150, 310, 250, 40);
        t.setBackground(Color.YELLOW);
        t.setOpaque(false);
        g.setBounds(150, 410, 250, 40);
        g.setBackground(Color.YELLOW);
        g.setOpaque(false);
 
        razdel.setBounds(150, 240, 400, 40);
        tema.setBounds(150, 350, 400, 40);
        ground.setBounds(150, 450, 400, 40);
 
        gotovo.setFont(textButton);
        gotovo.setBounds(300, 550, 100, 40);
 
        //Укладываем все компоненты на панель
        p.add(label);
        p.add(r);
        p.add(razdel);
        p.add(t);
        p.add(tema);
        p.add(g);
        p.add(ground);
        p.add(gotovo);
    }
 
    private static void initMasResults(){
        for (int j = 0; j < MyBox.manyAsksResult.length; j++){
            MyBox.manyAsksResult[j] = "";
            MyBox.answerResult[j] = "";
            MyBox.picturesResult[j] = new ImageIcon("H://Projects with IDEA'18/Photos/OkPhoto/Brasilia.jpg");//null;
            MyBox.isWasPressed[j] = false;
            for (int k = 0; k < MyBox.bufResult[MyPlay.getI()].length; k++) {
                MyBox.rememberColor[j][k] = MyPlay.getBaseColor();
                MyBox.bufResult[j][k] = "";
            }
        }
    }
 
    private MyStart(String title){
        super(title);
        gotovo.addActionListener(this::actionPerformed);
        
        add(p);
        setSize(700, 700);
        setVisible(true);
    }
 
    public static void main(String[] args){
        f = new MyStart("Стартовая страница");
        f.setResizable(false);
        initMasResults();
        p.repaint();
        start(f);
        p.repaint();
        f.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
 
    @Override
    public void actionPerformed(ActionEvent e) {
        switch ((String)razdel.getSelectedItem()) {//Считывает выбранный пункт меню
            case "География":
                tema.addItem("Общие вопросы");
                tema.addItem("Европа");
                tema.addItem("Северная Америка");
                tema.addItem("Южная Америка");
                switch ((String)tema.getSelectedItem()) {
                    case "Общие вопросы":
                        switch ((String)ground.getSelectedItem()) {
                            case "По-проще":
                                MyBox.manyAsksResult = MyBox.manyAsksG1;
                                MyBox.bufResult = MyBox.bufG1;
                                MyBox.answerResult = MyBox.answerG1;
                                MyBox.picturesResult = MyBox.picturesG1A;
 
                                MyPlay.startA();
                                break;
                            case "По-сложнее":
                                MyBox.manyAsksResult = MyBox.manyAsksG1;
                                MyBox.bufResult = MyBox.bufG1;
                                MyBox.answerResult = MyBox.answerG1;
                                MyBox.picturesResult = MyBox.picturesG1B;
 
                                MySecondGround.startB();
                                break;
                            default:
                        }
                        break;
                    case "Европа":
                        break;
                    case "Северная Америка":
                        break;
                    case "Южная Америка":
                        break;
                    default:
                }
                break;
            default:
               
        }
    }
}
Миниатюры
Некорректно отрисовывается графический интерфейс   Некорректно отрисовывается графический интерфейс   Некорректно отрисовывается графический интерфейс  

0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.08.2018, 19:53
Ответы с готовыми решениями:

Графический интерфейс
Скажите, пожалуйста, допустимо ли размещать различные swing-виджеты на диалоговом окне? Я имею ввиду не на панели, которая принадлежит...

Графический интерфейс
вот у меня есть программа перебор сочетаний с повторением и без, и подсчет по формуле кол-во этих сочетаний....как мне связать кнопки с...

Графический интерфейс
Подскажите пожалуйста, как создать графический интерфейс (если можно, поподробней)? :scratch:

4
 Аватар для snajper_ro
116 / 101 / 52
Регистрация: 14.09.2011
Сообщений: 696
Записей в блоге: 1
25.08.2018, 08:03
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
125
126
127
128
129
130
131
132
133
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class MyStart extends JFrame implements ActionListener {
    private static JFrame f;
    private static JMenuBar menuBar = new JMenuBar();
    private static JMenu file = new JMenu("Файл"), help = new JMenu("Справка");
    private static JMenuItem newTest = new JMenuItem("Новый тест"), open = new JMenuItem("Открыть попытку"),
            save = new JMenuItem("Сохранить тест"), exit = new JMenuItem("Выход"),
            reiting = new JMenuItem("Статистика игрока"), rights = new JMenuItem("Правила игры"),
            about = new JMenuItem("О программе");
 
    private static String[] dataR = {"География", "История", "Литература"};
    private static String[] geographyT = {"Общие вопросы", "Европа", "Северная Америка", "Южная Америка"};
    private static String[] historyT = {"Общие вопросы", "Россия, век XVI", "Россия, век XVII", "Россия, век XVIII"};
    private static String[] groundT = {"По-проще", "По-сложнее"};
 
    private static JPanel p = new JPanel();
    private static JButton gotovo = new JButton("Готово");
    private static JLabel label = new JLabel("Добро пожаловать"), r = new JLabel("Выберите раздел: "),
            t = new JLabel("Выберите тему: "), g = new JLabel("Выберите степень сложности: ");
    private static JComboBox razdel = new JComboBox(dataR), tema = new JComboBox(), ground = new JComboBox(groundT);
    private static Font textButton = new Font("Arial", Font.ITALIC, 14);
    /*
    Методы класса
     */
    private static void start(JFrame frame) {
        //Меню
        frame.setJMenuBar(menuBar);
        menuBar.add(file);
        menuBar.add(help);
        file.add(newTest);
        file.add(open);
        file.add(save);
        file.add(exit);
        help.add(reiting);
        help.add(rights);
        help.add(about);
        p.repaint();
        //Создаём шрифты
        Font text = new Font("Arial", Font.ITALIC, 17);
 
        //Создаём панели
        p.setLayout(null);
        p.setBackground(Color.GREEN);
 
        //
        label.setOpaque(true);
        label.setBackground(Color.YELLOW);
        label.setHorizontalAlignment(SwingConstants.CENTER);
        label.setBounds(100,40,500, 100);
 
        r.setBounds(150, 200, 250, 40);
        r.setBackground(Color.YELLOW);
        r.setOpaque(false);
        t.setBounds(150, 310, 250, 40);
        t.setBackground(Color.YELLOW);
        t.setOpaque(false);
        g.setBounds(150, 410, 250, 40);
        g.setBackground(Color.YELLOW);
        g.setOpaque(false);
 
        razdel.setBounds(150, 240, 400, 40);
        tema.setBounds(150, 350, 400, 40);
        ground.setBounds(150, 450, 400, 40);
 
        gotovo.setFont(textButton);
        gotovo.setBounds(300, 550, 100, 40);
 
        //Укладываем все компоненты на панель
        p.add(label);
        p.add(r);
        p.add(razdel);
        p.add(t);
        p.add(tema);
        p.add(g);
        p.add(ground);
        p.add(gotovo);
    }
 
 
    private MyStart(String title){
        super(title);
 
        add(p);
        setSize(700, 700);
        setVisible(true);
    }
 
    public static void main(String[] args){
        f = new MyStart("Стартовая страница");
        f.setResizable(false);
        p.repaint();
        start(f);
        p.repaint();
        f.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
 
    @Override
    public void actionPerformed(ActionEvent e) {
        switch ((String)razdel.getSelectedItem()) {//Считывает выбранный пункт меню
            case "География":
                tema.addItem("Общие вопросы");
                tema.addItem("Европа");
                tema.addItem("Северная Америка");
                tema.addItem("Южная Америка");
                switch ((String)tema.getSelectedItem()) {
                    case "Общие вопросы":
                        switch ((String)ground.getSelectedItem()) {
                            case "По-проще":
                                break;
                            case "По-сложнее":
                                break;
                            default:
                        }
                        break;
                    case "Европа":
                        break;
                    case "Северная Америка":
                        break;
                    case "Южная Америка":
                        break;
                    default:
                }
                break;
            default:
 
        }
    }
}
вот так у меня вроде работает как вам надо
что касается по центру , вы меряли по пикселяем, то что они сдвинуты вправо, надо точно и что сдвинуто
уменьшайте ваш код .пока он будте приемлимый для исправлений на форуме, или начните писать сначала ,
пока не найдете проблемное место, корректный способ
0
6 / 6 / 0
Регистрация: 17.08.2017
Сообщений: 141
30.08.2018, 18:30  [ТС]
snajper_ro, у Вас мой код сразу нормально открылся или сыграло роль, что Вы убрали процедуру initMasResults() и отключили обработку события? То ли у меня взгляд "замылился", то ли что, но других изменений я не заметил.
0
 Аватар для snajper_ro
116 / 101 / 52
Регистрация: 14.09.2011
Сообщений: 696
Записей в блоге: 1
30.08.2018, 18:32
у вас не весь код я смог определить, сравните по строчке и вы поймете все
0
6 / 6 / 0
Регистрация: 17.08.2017
Сообщений: 141
29.10.2018, 23:32  [ТС]
С тех пор код программы очень сильно изменился, проблема до сегодняшнего дня оставалась. Весьма случайно мне довелось узнать о возможной полезности методов validate(), revalidate() при решении проблем, вызванных некорректным отображением графического интерфейса на экране. Если после изменения содержимого контейнера (например, панели) криво отрисовывается интерфейс, то после методов вида КОНТЕЙНЕР.add(КОМПОНЕНТ) советую прописать пару строчек:
Java
1
2
p.revalidate();
p.repaint();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.10.2018, 23:32
Помогаю со студенческими работами здесь

Графический интерфейс
Помогите, пожалуйста, сделать графический интерфейс для шифра. только окошко ввода-кнопку зашифровать-и вывод результата. Очень срочно...

Графический интерфейс
есть класс-клетка как ее связать с изображением на интерфейсе?

Графический интерфейс
Решил сделать форму при массива графических элементов. Нужно было обращаться к ним. Сделал такой метод в родителе public void...

Графический интерфейс + данные
Имеется графический интерфейс, который в будущем будет активно использовать много различных методов (работа с сетью, работа с файлами и...

Графический интерфейс (самые азы)
Подскажите, пожалуйста. Написала код. Кнопки идут одна за другой. А как сделать, чтобы одна кнопка была ниже второй? public...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru