Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Grüne im Grünen Ученик (87), открыт 1 неделю назад
import java.awt.*;
import javax.swing.*;

public class BoidDriver {
public static void main(String[] args) {
// Создаем основное окно
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setUndecorated(true); // Убираем декоративные элементы окна

// Получаем размер экрана
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(screenSize);

// Создаем панель для симуляции
JPanel simulationPanel = new JPanel();
simulationPanel.setPreferredSize(new Dimension((int)(screenSize.width * 0.85), screenSize.height));
simulationPanel.setLayout(new BorderLayout());

// Добавляем симуляцию на свою панель
BoidRunner simulation = new BoidRunner();
simulationPanel.add(simulation, BorderLayout.CENTER );


// Создаем информационную панель
JPanel infoPanel = new JPanel();
infoPanel.setLayout(new BoxLayout(infoPanel, BoxLayout.Y_AXIS));
infoPanel.setPreferredSize(new Dimension((int)(screenSize.width * 0.15), screenSize.height));

// Создаем кнопки
JButton closeButton = new JButton("закрыть");
closeButton.setAlignmentX( Component.CENTER _ALIGNMENT); // Выравниваем по центру
closeButton.setMaximumSize(new Dimension(((int)(screenSize.getWidth()* 0.15)), 50)); // Фиксированная высота
closeButton.addActionListener(e -> System.exit(0)); // Закрываем приложение

JButton minimizeButton = new JButton("свернуть");
minimizeButton.setAlignmentX( Component.CENTER _ALIGNMENT); // Выравниваем по центру
minimizeButton.setMaximumSize(new Dimension(((int)(screenSize.getWidth()* 0.15)), 50)); // Фиксированная высота
minimizeButton.addActionListener(e -> frame.setState(JFrame.ICONIFIED)); // Сворачиваем окно


// Устанавливаем цвет фона и текста для кнопок
closeButton.setBackground(new Color(64, 64, 64)); // Темно-серый цвет фона
closeButton.setForeground(Color.WHITE); // Белый цвет текста
minimizeButton.setBackground(new Color(64, 64, 64)); // Темно-серый цвет фона
minimizeButton.setForeground(Color.WHITE); // Белый цвет текста


// Добавляем кнопки на информационную панель
infoPanel.add(closeButton);
infoPanel.add(minimizeButton);

// Добавляем панели на основное окно
frame.add(simulationPanel, BorderLayout.WEST);
frame.add(infoPanel, BorderLayout.EAST);

// Устанавливаем размер и делаем окно видимым
frame.pack();
frame.setLocationRelativeTo(null); // Центрируем окно
frame.setVisible(true);

// Запускаем симуляцию
simulation.run ();
}
}
1 ответ
Schweik Мыслитель (5915) 1 неделю назад
Начнем с EDT (Event Dispatch Thread). Поместите создание вашего GUI (от JFrame frame = new JFrame(); до frame.setVisible) в EDT поток.
https://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
Скорее всего, проблема исчезнет.
Grüne im GrünenУченик (87) 1 неделю назад
Спасибо большое!!!!!!??? Проблема действительно была с потоками
Похожие вопросы