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

Java (IntelliJ IDEA) + Swing

14.05.2020, 16:27. Показов 2761. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такой код:
Main:
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
import java.awt.*;
import java.awt.event.KeyEvent;
import javax.swing.*;
 
import lib.KeyListener;
 
class Main {
 
    public static void main(String[] args) {
 
        JFrame window = new JFrame("Window");
 
        window.getContentPane().setBackground(Color.BLACK);
 
        window.setSize(400, 400);
 
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        window.setVisible(true);
 
        lib.KeyListener listener = new lib.KeyListener();
 
        window.addKeyListener(listener.listener);
 
        //lib.Character character = new lib.Character(0, 0);
 
        while(true) {
 
            if(listener.event.getKeyCode() == KeyEvent.VK_SPACE) {
                System.out.print("Yeah!");
                break;
            }
 
        }
 
//        while (true) {
//
//            character.print(window);
//
//
//
//        }
 
 
    }
 
}
KeyListener:
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
package lib;
 
import java.awt.event.KeyEvent;
 
enum EventType { Pressed, Released, Typed }
 
public class KeyListener {
 
    public KeyEvent event;
 
    public EventType type;
 
    public class Listener implements java.awt.event.KeyListener {
 
        @Override public void keyPressed(KeyEvent e) {
            event = e;
            type = EventType.Pressed;
        }
 
        @Override public void keyReleased(KeyEvent e) {
            event = e;
            type = EventType.Released;
        }
 
        @Override public void keyTyped(KeyEvent e) {
            event = e;
            type = EventType.Typed;
        }
 
    }
 
    public Listener listener = new Listener();
 
}
Когда запускаю, выводит "Exception in thread "main" java.lang.NullPointerException
at Main.main(Main.java:29)"
1. Почему это выводится?
2. Почему когда я space нажимаю, break не происходит???
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.05.2020, 16:27
Ответы с готовыми решениями:

swing for intellij idea
Всем привет. Такой вопрос, как писать GUI в Intellij IDEA использую swing. заранее спасибо

Intellij GUI IDEA проектировщик Swing свободное позиционирование
Здравствуйте, подскажите как создавать формы GUI в Intellij IDEA. Я создал форму не могу "набросать" на нее компоненты, они...

IntelliJ Idea & Java & Questions
Добрый вечер. Начал изучать Java. Подскажите пожалуйста: 1) как к кнопке привязать события 2) как называется елемент именуемый в С#...

7
Модератор
Эксперт Java
 Аватар для alecss131
2850 / 1358 / 405
Регистрация: 11.08.2017
Сообщений: 4,332
Записей в блоге: 2
14.05.2020, 17:05
Спрашивается нафига тут класс внутри класса? У них есть свои особенности, например, "Объекты внутренних классов могут быть созданы только в том классе, в котором внутренние классы опеределены. В других внешних классах объекты внутреннего класса создать нельзя.". В первом методы вы пытаетесь вытащить объект в другой класс. Я стараюсь избегать создавать классы внутри класса, без них проще и предсказуемей поведение кода, исключение только анонимные классы.
Еще по хорошему почти все поля должны быть приватными и доступ к ним через гетеры/сетеры.
0
7 / 6 / 3
Регистрация: 30.03.2020
Сообщений: 123
14.05.2020, 19:32  [ТС]
Вот, я переделал, теперь без ошибок, но когда я нажимаю на Escape - всё равно не работает.
Почему?

Main:
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
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
 
class Main {
 
    public static void main(String[] args) {
 
        JFrame window = new JFrame("Window");
 
        window.getContentPane().setBackground(Color.BLACK);
 
        window.setSize(400, 400);
 
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        window.setVisible(true);
 
        lib.KeyListener listener = new lib.KeyListener();
 
        window.addKeyListener(listener);
 
        int keycode;
 
        while(true) {
 
            keycode = listener.get();
 
            if(keycode == KeyEvent.VK_ESCAPE) {
                System.out.print("Yeah!");
                break;
            }
 
 
        }
 
    }
 
}
KeyListener:
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
package lib;
 
import java.awt.event.KeyEvent;
 
public class KeyListener implements java.awt.event.KeyListener {
 
    private KeyEvent Key = null;
 
    private void initialize(KeyEvent e) {
        if(Key == null)
            Key = new KeyEvent(e.getComponent(), e.getID(), e.getWhen(), e.getModifiersEx(), e.getKeyCode(), e.getKeyChar(), e.getKeyLocation());
    }
 
    @Override public void keyPressed(KeyEvent e) {
        initialize(e);
        Key = e;
    }
 
    @Override public void keyReleased(KeyEvent e) { }
 
    @Override public void keyTyped(KeyEvent e) { Key.setKeyCode(-1); }
 
    public int get() {
        return ((Key == null) ? -1 : Key.getKeyCode());
    }
 
}
0
Модератор
Эксперт Java
 Аватар для alecss131
2850 / 1358 / 405
Регистрация: 11.08.2017
Сообщений: 4,332
Записей в блоге: 2
14.05.2020, 21:29
Лучший ответ Сообщение было отмечено Tapacuk как решение

Решение

Цикл while-true блокирует считывание клавиш, да и ваш листенер имхо не очень
вот вариант получше, использование if(listener.get(KeyEvent.VK_ESCAPE))
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
public class KeyListener implements java.awt.event.KeyListener {
 
    private int key;
 
    @Override 
    public void keyPressed(KeyEvent e) {
        key = e.getKeyCode();
    }
 
    @Override 
    public void keyReleased(KeyEvent e) { }
 
    @Override 
    public void keyTyped(KeyEvent e) { }
 
    public boolean get(int code) {
        if (code == key) {
            key = -1;
            return true;
        } else {
            return false;
        }
    }
}
использовать имена как у базовых классов не очень идея
1
7 / 6 / 3
Регистрация: 30.03.2020
Сообщений: 123
15.05.2020, 07:00  [ТС]
Спасибо за класс)
А как сделать чтобы цикл не перекрывал считывание?
0
Модератор
Эксперт Java
 Аватар для alecss131
2850 / 1358 / 405
Регистрация: 11.08.2017
Сообщений: 4,332
Записей в блоге: 2
15.05.2020, 11:27
Если добавить else к условию внутри цикла то все работает а без него нет, странно..
Java
1
2
3
4
5
6
7
8
while(true) {
            if(listener.get(KeyEvent.VK_ESCAPE)) {
                System.out.println("Yeah!");
                break;
            } else {
                System.out.println("@");
            }
        }
0
7 / 6 / 3
Регистрация: 30.03.2020
Сообщений: 123
15.05.2020, 14:53  [ТС]
У меня даже так не работает(
Что делать?

Добавлено через 2 часа 58 минут
Всё, это больше не нужно, но спасибо за помощь)

Я закрываю тему
0
0 / 0 / 0
Регистрация: 24.04.2023
Сообщений: 1
25.04.2023, 18:36
Здравствуйте люди!
Пару недель назад определился с языком программирования и средой разработки.
Java + Intellij IDEA

Смотрю ютубы. У всех все красиво. Только у меня ничерта не получается даже открыть браузер локально. Уже 3 дня не понимаю чем занимаюсь. Ищу то чего не понимаю. Помогите советом или решением, или отправьте туде где могут.


Суть проблемы на данный момент.
***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class


Action:

Consider the following:
If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).


Process finished with exit code 1

Я получил ответ от одного человека. "Нужно правильно указать url подключения к вашей БД в файле application.yml"
Проблему это не решило, наоборот добавило. Вот три дня ищу урл с БД, файла application.yml не нашел нигде.

Мне нужно открывать страницу браузера локально, через порт 8081. ВСЕ!!

POM.XML
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>ru.devmark</groupId>
<artifactId>example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>example</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.04.2023, 18:36
Помогаю со студенческими работами здесь

Intellij IDEA + Qt Jambi
Доброго времени суток! Появилась необходимость использовать связку Java + Qt в Intellij. Джаву только начал изучать, так что возникло...

Gui in intellij idea
Доброго времени суток. Вопрос чисто по GUI. Я хочу сделать что-то типа GroupBox(а) как в Visual Studio и добавить в него 3 Label. Пытался...

GUI form Intellij IDEA
Доброго времени суток, порекомендуйте пожалуйста самоучитель, книгу, онлайн курс по GUI Form (желательно в среде разработки Intellij IDEA,...

Создание 3D графиков в IntelliJ IDEA
Подскажите пожалуйста, с помощью чего можно создать 3D графики в IntelliJ IDEA.

IntelliJ IDEA (Выдает ошибку)
Создал новый проект. Создал класс public class MainClass { public static void main(String args); { ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru