2

是否可以在 Java 中创建某种具有框架和边框但没有标题按钮(最小化、恢复、关闭)的 Window 对象。

当然,我无法使用该undecorated设置。此外,窗口需要:

  • 有一个平台渲染的边框
  • 有一个标题栏
  • 没有字幕按钮。如果需要,我会以编程方式处理窗口。
  • 使用默认值或System外观

这是一个例子:

无字幕窗口

4

3 回答 3

6

这是关于

  1. 体面的如何创建半透明和异形的窗户

  2. 未装饰Compound BordersJDialog,然后您可以创建来自 Native OS 的类似或更好的 Borders

  3. 创建JPanel(或JLabel#opaque(true)GradientPaint

  4. 或(更好non_focusable==我的观点)JLabel准备好Icon

  5. 添加到/JPanel组件移动器/组件调整大小(注意,永远不要将这两个代码混合在一起)@camickrJLabel

  6. 设置Alpha Transparency为绘画JPanel/JLabel伟大look and feel

  7. 最简单的方法放在那里JMenuBar

于 2012-09-05T11:39:47.967 回答
4

最简洁的答案是不。

更长的答案可能是,但您需要调查 JNI/JNA 实现

于 2012-09-05T10:21:13.923 回答
2

试试这个小例子。它将从 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();
            }
        });
    }
}
于 2012-09-05T10:23:53.393 回答