JFrame上的“关闭/最小化”按钮的自定义设计

时间:2012-06-06 11:12:56

标签: java swing jframe look-and-feel windowlistener

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

4 个答案:

答案 0 :(得分:6)

诀窍在于PLAFsetDefaultLookAndFeelDecorated(true)Specifying Window Decorations)。

E.G。

Metal Windows

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();
            }
        });
    }
}

答案 1 :(得分:3)

认为你是在追随JWindow

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

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

答案 2 :(得分:2)

我唯一知道可以做的就是向JFrame添加WindowListener并处理该侦听器中的结束事件。您几乎可以制作任何内容,例如显示对话框,甚至取消关闭JFrame

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

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

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

答案 3 :(得分:0)

  1. 设置jframe undecorated
  2. 为每个按钮放置一个jlabel
  3. 为每个Btn添加自己的图标。
  4. mouseListenersjlabel添加System.exit(0);/set ICONIFIED option 指定代码,例如{{1}}