Могу ли я создать окно в Java без кнопок заголовков?

Можно ли создать в Java какой-либо объект Window, имеющий рамку и границу, но без кнопок заголовков (свернуть, восстановить, закрыть).

Естественно, я не могу использовать undecorated установка. Далее в окне необходимо:

  • Иметь визуализированную платформу границу
  • Есть заголовок
  • Не имеют заголовков кнопок. Если понадобится, я позабочусь об утилизации окна программно.
  • Использовать по умолчанию или System Смотри и чувствуй

Вот пример:

окно без заголовка

3 ответа

Решение

Краткий ответ: нет.

Более длинный ответ, вероятно, но вам нужно исследовать реализацию JNI/JNA

Речь идет о

  1. Как создать полупрозрачные и фасонные окна

  2. неукрашенный JDialog С помощью Compound Borders вы можете создать более или менее приятные границы, как в Native OS.

  3. Создайте JPanel (или жеJLabel#opaque(true)) с GradientPaint

  4. или лучше non_focusable == мой взгляд) JLabel с подготовленным Icon

  5. добавить к JPanel / JLabel Перемещение компонента / Изменение размера компонента (обратите внимание, никогда не смешивайте эти два кода вместе) @camickr

  6. задавать Alpha Transparency для рисования в JPanel / JLabel для великого look and feel

  7. простейший из способов ставится там JMenuBar

Попробуйте этот маленький пример. Это удалит (не только отключит) кнопку сворачивания, увеличения и закрытия из JFrame.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class Example {

    public void buildGUI() {
        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame();
        frame.setResizable(false);
        removeButtons(frame);
        JPanel panel = new JPanel(new GridBagLayout());
        JButton button = new JButton("Exit");
        panel.add(button,new GridBagConstraints());
        frame.getContentPane().add(panel);
        frame.setSize(400,300);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        button.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent a){
                System.exit(0);
            }
        });
    }

    public void removeButtons(Component comp) {
        if(comp instanceof AbstractButton) {
            comp.getParent().remove(comp);
        }
        if (comp instanceof Container) {
            Component[] comps = ((Container)comp).getComponents();
            for(int x=0, y=comps.length; x<y; x++) {
                removeButtons(comps[x]);
            }
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                new Example().buildGUI();
            }
        });
    }
}
Другие вопросы по тегам