ABCHERRY7 2017-10-19 16:38 采纳率: 0%
浏览 394

java JLabel最大化程序一开始运行点击不起作用

这个按钮的功能就是实现,点击它窗口就最大化,再点击它窗口就还原。这在这两个状态切换。

但我的 java程序一开始运行,点击JLabel最大化按钮,不起作用,要先点击了最小化后,再点最大化才起作用。

代码如下:请各位大神赐教

 /**
     * 最大化按钮
     */
    public void maximizeButton(){
        JLabel maxButton = new JLabel();
        maxButton.setBounds(220,474,28, 28);
        maxButton.setIcon(new ImageIcon(default_max));
        frameBackground.add(maxButton);
        maxButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent e) {
                // TODO Auto-generated method stub
                maxButton.setIcon(new ImageIcon(hover_max));
            }
            @Override
            public void mouseExited(MouseEvent e) {
                // TODO Auto-generated method stub
                maxButton.setIcon(new ImageIcon(default_max));
            }
            @Override
            public void mouseClicked(MouseEvent e) {
                // TODO Auto-generated method stub

                if(getFrameState() == 22){
                    restore();
                }else if(getFrameState() == 33){
                    max();
                }else if(getFrameState() == 44){
                    max();
                }
            }
        });
    }
    /**
     * 获取窗口状态
     */
    public int getFrameState(){
        jFrame.addWindowStateListener(new WindowStateListener() {

            @Override
            public void windowStateChanged(WindowEvent state) {
                // TODO Auto-generated method stub

                if(state.getOldState() == JFrame.NORMAL) {
                    jFrameState = 22;//旧窗口正常
                }else if(state.getNewState() == JFrame.NORMAL) {
                    jFrameState = 33;//新窗口恢复到初始状态
                }else if(state.getNewState() == JFrame.MAXIMIZED_BOTH) {
                    jFrameState = 44;//新窗口最大化
                }
            }
        });
        return jFrameState;
    } 
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 01:26
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    你可能遇到了一些问题,比如:

    1. 窗体布局:你的 maximizeButton 方法在添加到框架之前没有调用 setBounds()setIcon() 方法。
    2. 事件处理逻辑:当窗体被最大化时,你需要重置窗体的大小和位置属性(即 setSize()setLocation())以使其回到原始状态。
    3. 窗体监听器:你可能忘记在窗体被最大化的回调中调用窗体监听器的 windowStateChanged() 方法来更新窗体的状态。

    以下是修复这些问题的代码示例:

    public class MaximizeButtonExample extends JFrame {
    
        private static final long serialVersionUID = 1L;
    
        public MaximizeButtonExample() {
            super("Maximize Button Example");
    
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0); // 关闭应用程序
                }
    
                @Override
                public void windowOpened(WindowEvent e) {
                    // 不做任何事情
                }
    
                @Override
                public void windowIconified(WindowEvent e) {
                    // 当窗体被最小化时,设置为最大化
                    setSize(600, 400);
                    setLocationRelativeTo(null);
                    setVisible(true);
                    setExtendedState(JFrame.MAXIMIZED_BOTH);
                }
    
                @Override
                public void windowDeiconified(WindowEvent e) {
                    // 当窗体从最小化变为显示时,设置回原来的状态
                    setSize(500, 300);
                    setLocation(300, 200);
                    setVisible(false);
                    setExtendedState(JFrame.NORMAL);
                }
    
                @Override
                public void windowActivated(WindowEvent e) {
                    // 当窗体激活时,执行其他操作
                    // ...
                }
    
                @Override
                public void windowDeactivated(WindowEvent e) {
                    // 当窗体失去焦点时,执行其他操作
                    // ...
                }
            });
    
            JButton button = new JButton("Maximize");
            button.addActionListener(e -> {
                if (getExtendedState() != JFrame.MAXIMIZED_BOTH) {
                    setSize(600, 400);
                    setLocationRelativeTo(null);
                    setVisible(true);
                    setExtendedState(JFrame.MAXIMIZED_BOTH);
                } else {
                    setSize(500, 300);
                    setLocation(300, 200);
                    setVisible(false);
                    setExtendedState(JFrame.NORMAL);
                }
            });
    
            JPanel panel = new JPanel();
            panel.add(button);
            this.getContentPane().add(panel);
        }
    
        public static void main(String[] args) {
            EventQueue.invokeLater(() -> {
                MaximizeButtonExample example = new MaximizeButtonExample();
                example.setVisible(true);
            });
        }
    }
    

    这段代码首先创建了一个名为 MaximizeButtonExample 的类,继承自 JFrame 类。然后,我们定义了一个方法 main 来初始化窗体,并将其设置为主动显示模式。在这个例子中,我们使用了一个按钮来模拟最大化功能。

    注意:

    • 我们将窗体的监听器配置为一个 WindowAdapter 实现,这样可以在窗体被不同状态改变时触发相应的操作。
    • windowClosing() 方法中,我们设置了窗体关闭的默认行为,例如退出程序。
    • windowIconified() 方法中,我们改变了窗体的大小和位置属性以使其回到原状。
    • windowDeiconified() 方法中,我们改变了窗体的大小和位置属性以使其再次显示。

    现在,当你单击按钮时,如果窗体已处于最大化或最小化状态,按钮应相应地改变其图标并触发适当的事件;否则,它应该保持不变。

    评论

报告相同问题?