БА хочет окно, которое
Он хочет, чтобы мы, разработчики Java, добились того же, что сделали ребята из C, а именно:
Учитывая требования к кнопкам управления окнами, кажется, другого выхода нет JFrame. Но как отключить кнопку сворачивания? Я рассмотрю возможность использования собственных методов, если это единственный способ (приложения устанавливаются на ПК с Windows).
Я могу сделать что-то подобное, но кнопка свертывания остается включенной - просто рамка снова появляется.
import javax.swing.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class NonMinimizableFrameDemo {
public NonMinimizableFrameDemo() {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.addWindowListener(getWindowAdapter());
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(NonMinimizableFrameDemo::new);
}
private final JFrame frame = new JFrame();
private WindowAdapter getWindowAdapter() {
return new WindowAdapter() {
@Override
public void windowIconified(WindowEvent we) {
frame.setState(JFrame.NORMAL);
JOptionPane.showMessageDialog(frame, "Cant Minimize");
}
};
}
}
@GilbertLeBlanc, можешь ли ты показать небольшую демонстрацию JFrame со специальной строкой заголовка?
@GilbertLeBlanc о, вы имеете в виду отключение заголовка и замену его панелью с JButton. Извините, это не будет принято. Я имею в виду обычные, обычные кнопки управления окнами
Вы можете рисовать фигуры на JPanel. Вы можете идентифицировать щелчки мышью в определенных местах JPanel. У Oracle есть полезное руководство Создание графического интерфейса с помощью Swing . Пропустите раздел «Обучение с использованием среды IDE NetBeans». Особое внимание обратите на раздел Выполнение индивидуальной росписи.
Что такое «БА»? Избегайте бесполезных и нерелевантных сокращений.
@BasilBourque Разве это не достаточно распространено, чтобы не требовать объяснений? Разве не все команды разработчиков имеют степени бакалавра (люди, которые переводят бизнес-требования в конкретные задачи для разработчиков)?
Определите каждое сокращение при первом использовании. (Или ссылку на словарь/энциклопедию.)




Минимизация отключена. Повторяющийся вопрос: Отключить кнопку сворачивания JFrame
package fenster;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
public class Test
{
public Test()
{
initComponents();
}
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
new Test();
}
});
}
private final JFrame frame = new JFrame();
private void initComponents()
{
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addWindowListener(getWindowAdapter());
frame.setSize(600, 400);
frame.setVisible(true);
}
private WindowAdapter getWindowAdapter()
{
return new WindowAdapter()
{
@Override
public void windowIconified(WindowEvent we)
{
frame.setState(JFrame.NORMAL);
}
};
}
}
Спасибо. Я действительно подумал об этом и запустил небольшую демонстрацию с использованием специального оконного адаптера, такого как ваш. Проблема в том, что кнопка по-прежнему доступна для нажатия, а окно по-прежнему свернуто. Он просто сразу же всплывает обратно
А как насчет другой идеи?
Сложный вариант — удалить декор JFrame и поместить внутрь JInternalFrame. С помощью прослушивателя вам необходимо максимизировать родительский JFrame, когда JInternalFrame развернут.
package fenster;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.EventObject;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.MouseInputAdapter;
public class Test
{
public Test()
{
initComponents();
}
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
new Test();
}
});
}
private JFrame frame;
private void initComponents()
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (ClassNotFoundException | InstantiationException
| IllegalAccessException | UnsupportedLookAndFeelException e)
{
// nothing
}
frame = new JFrame();
frame.setUndecorated(true);
frame.setResizable(true);
frame.setSize(600, 400);
frame.setLocationByPlatform(true);
JInternalFrame iframe = new JInternalFrame();
iframe.setResizable(true);
iframe.setClosable(true);
iframe.setMaximizable(true);
iframe.setIconifiable(false);
iframe.setSize(600, 400);
iframe.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
iframe.addInternalFrameListener(getAdapter());
iframe.addPropertyChangeListener(new MyPropertyChangeListener());
iframe.addMouseMotionListener( new DragHandler() );
frame.addMouseMotionListener( new DragHandler() );
frame.add(iframe);
iframe.setVisible(true);
frame.setVisible(true);
}
private InternalFrameAdapter getAdapter()
{
return new InternalFrameAdapter()
{
@Override
public void internalFrameClosing(InternalFrameEvent e)
{
System.exit(0);
}
};
}
private class MyPropertyChangeListener implements PropertyChangeListener
{
@Override
public void propertyChange(PropertyChangeEvent evt)
{
dealWithEvent(evt);
}
}
private class DragHandler extends MouseInputAdapter
{
public void mouseDragged( MouseEvent evt )
{
dealWithEvent(evt);
}
}
private void dealWithEvent (EventObject event)
{
if (event instanceof PropertyChangeEvent)
{
PropertyChangeEvent e = (PropertyChangeEvent) event;
if (e.getPropertyName().equalsIgnoreCase("maximum"))
{
if (Toolkit.getDefaultToolkit().getScreenSize().width == frame.getWidth())
{
frame.setExtendedState(JFrame.NORMAL);
}
else
{
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
}
}
}
else if (event instanceof MouseEvent && ((MouseEvent) event).getY() < 200)
{
MouseEvent e = (MouseEvent) event;
int x = e.getX();
int y = e.getY();
int screenX = frame.getX();
int screenY = frame.getY();
screenX += x;
screenY += y;
frame.setLocation( screenX, screenY );
}
else if (event instanceof MouseEvent && ((MouseEvent) event).getY() > 200)
{
MouseEvent e = (MouseEvent) event;
frame.setSize(e.getX(), e.getY());
}
}
}
Спасибо! Хотя он не будет максимизироваться до размера экрана (только до размера его родителя)
Вот почему с помощью слушателя я максимизирую родительский элемент, когда максимизируется внутренний фрейм.
Спасибо за ваш вклад. Вероятно, это лучший способ сделать что-то подобное в Swing.
Вы можете использовать недекорированный
JFrameсо специальной строкой заголовка. Вы также можете переключиться с Java на более подходящий язык графического интерфейса Windows. За что клиент готов платить.