2

我想应用我自己的关闭和最小化按钮。有没有办法改变JFrame设计?

4

4 回答 4

6

诀窍在于PLAFsetDefaultLookAndFeelDecorated(true)指定窗饰)。

例如

金属 视窗

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

public class FrameCloseButtonsByLookAndFeel {

    FrameCloseButtonsByLookAndFeel() {
        String[] names = {
                UIManager.getSystemLookAndFeelClassName(), 
                UIManager.getCrossPlatformLookAndFeelClassName()
        };
        for (String name : names) {
            try {
                UIManager.setLookAndFeel(name);
            } catch (Exception e) {
                e.printStackTrace();
            }
            // very important to get the window decorations.
            JFrame.setDefaultLookAndFeelDecorated(true);
            JFrame f = new JFrame(UIManager.getLookAndFeel().getName());
            f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

            JPanel gui = new JPanel(new BorderLayout());
            f.setContentPane(gui);

            JTree tree = new JTree();
            tree.setVisibleRowCount(4);
            gui.add(tree, BorderLayout.LINE_START);

            gui.add(new JScrollPane(new JTextArea(3,15)));

            JToolBar toolbar = new JToolBar();
            gui.add(toolbar, BorderLayout.PAGE_START);
            for (int ii=1; ii<5; ii++) {
                toolbar.add(new JButton("Button " + ii));
                if (ii%2==0) {
                    toolbar.addSeparator();
                }
            }

            f.pack();

            f.setLocationByPlatform(true);
            f.setVisible(true);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new FrameCloseButtonsByLookAndFeel();
            }
        });
    }
}
于 2012-06-06T12:33:43.420 回答
3

认为你是在 JWindow 之后

http://docs.oracle.com/javase/7/docs/api/javax/swing/JWindow.html

然后,您可以创建自己的按钮,这些操作可以最小化/关闭您的窗口

于 2012-06-06T11:39:18.723 回答
2

我知道唯一可以做的就是在该侦听器中添加一个WindowListenerJFrame处理关闭事件。您几乎可以进行任何操作,例如显示对话框甚至取消关闭JFrame.

有关如何编写此类侦听器的更多详细信息,请参阅本教程。

至于最小化:据我所知,没有办法控制或修改这种行为,它完全由操作系统控制。

更改最小化/关闭/最大化按钮方面的唯一方法是使用自定义 LookAndFeel 和设置JFrame.setDefaultLookAndFeelDecorated (true);

于 2012-06-06T11:39:07.857 回答
0
  1. 设置jframe undecorated
  2. 为每个按钮放置一个jlabel
  3. 为每个Btn.
  4. 放置mouseListeners每个jlabel并指定代码,例如,System.exit(0);/set ICONIFIED option
于 2013-12-29T12:51:06.317 回答