Custom design for Close/Minimize buttons on JFrame

前端 未结 4 918
抹茶落季
抹茶落季 2021-01-15 16:21

I would like to apply my own close and minimize buttons. Is there any way to change the JFrame design?

相关标签:
4条回答
  • 2021-01-15 16:51
    1. Set jframe undecorated.
    2. Place a jlabel for each button.
    3. Put own icon for each Btn.
    4. Put mouseListeners for each jlabel and specify code eg, System.exit(0);/set ICONIFIED option
    0 讨论(0)
  • 2021-01-15 17:08

    The only thing I'm aware that can be done is to add a WindowListener to the JFrame and handle closing events in that listener. You can make virtually anything, like displaying dialogs or even cancelling the closing of the JFrame.

    See this tutorial for more details about how to write such listeners.

    As for minimizing: as far as I know, there is no way to control or modify such behaviour, it's completely controlled by the operating system.

    The only way to change the aspect of the minimize/close/maximize buttons is to use a custom LookAndFeel and setting JFrame.setDefaultLookAndFeelDecorated (true);.

    0 讨论(0)
  • 2021-01-15 17:10

    think you are after a JWindow

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

    You can then create your own buttons which actions can minimize/close your window

    0 讨论(0)
  • 2021-01-15 17:16

    The trick lies in the PLAF and setDefaultLookAndFeelDecorated(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();
                }
            });
        }
    }
    
    0 讨论(0)
提交回复
热议问题