Могу ли я создать окно в Java без кнопок заголовков?
Можно ли создать в Java какой-либо объект Window, имеющий рамку и границу, но без кнопок заголовков (свернуть, восстановить, закрыть).
Естественно, я не могу использовать undecorated
установка. Далее в окне необходимо:
- Иметь визуализированную платформу границу
- Есть заголовок
- Не имеют заголовков кнопок. Если понадобится, я позабочусь об утилизации окна программно.
- Использовать по умолчанию или
System
Смотри и чувствуй
Вот пример:
3 ответа
Краткий ответ: нет.
Более длинный ответ, вероятно, но вам нужно исследовать реализацию JNI/JNA
Речь идет о
неукрашенный
JDialog
С помощью Compound Borders вы можете создать более или менее приятные границы, как в Native OS.Создайте
JPanel
(или жеJLabel#opaque(true)
) сGradientPaint
или лучше
non_focusable
== мой взгляд)JLabel
с подготовленнымIcon
добавить к
JPanel
/JLabel
Перемещение компонента / Изменение размера компонента (обратите внимание, никогда не смешивайте эти два кода вместе) @camickrзадавать
Alpha Transparency
для рисования вJPanel
/JLabel
для великогоlook and feel
простейший из способов ставится там
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();
}
});
}
}