簡體   English   中英

隱藏Jpanel后如何更新Jframe

[英]How to update Jframe after hiding a Jpanel

我想在單擊按鈕時隱藏選定的面板。 我大部分工作都在進行,但是當面板為假時不會更新。

這是我嘗試過的事情之一:

compsToExperiment.setVisible(mapVis);
updateUI();


private void updateUI() {
        SwingUtilities.updateComponentTreeUI(this);
    }

這是在正確的軌道上嗎? 還有其他方法嗎?

updateComponentTreeUI()不會強制重畫。 您必須使用repaint方法。

compsToExperiment.setVisible(mapVis);
frame.repaint();

其中frame是面板所在的頂部窗口。

您不必做任何花哨的事情,只需調用setVisible(false); 在所說的JPanel 下面的示例證明了這一點:

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

public class InvisiblePanel
{
    private JPanel centerPanel;
    private JPanel footerPanel;

    private JTextField addField;
    private JTextField nameField;
    private JTextField occField;
    private JTextField phoneField;
    private JLabel nameLabel;
    private JLabel addLabel;
    private JLabel occLabel;
    private JLabel phoneLabel;

    private JPanel contentPane;
    private JButton hideButton;

    private void displayGUI() 
    {
        JFrame frame = new JFrame("Invisible Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        contentPane = new JPanel();
        contentPane.setOpaque(true);
        contentPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        contentPane.setBackground(Color.RED.darker().darker());
        contentPane.setLayout(new BorderLayout(5, 5));

        nameLabel = new JLabel("Guarantee Name : ");
        nameField = new JTextField();   
        addLabel = new JLabel("Address : ");
        addField = new JTextField();        
        occLabel = new JLabel("Occupation : ");
        occField = new JTextField();
        phoneLabel = new JLabel("Phone : ");
        phoneField = new JTextField();
        centerPanel = new JPanel();
        hideButton = new JButton("Hide");
        hideButton.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent ae)
            {
                if (centerPanel.isShowing())
                    centerPanel.setVisible(false);
                else
                    centerPanel.setVisible(true);
            }
        });

        centerPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        centerPanel.setOpaque(true);
        centerPanel.setBackground(Color.WHITE);
        centerPanel.setLayout(new GridLayout(0, 2, 5, 5));
        centerPanel.add(nameLabel);
        centerPanel.add(nameField);
        centerPanel.add(addLabel);
        centerPanel.add(addField);
        centerPanel.add(occLabel);
        centerPanel.add(occField);
        centerPanel.add(phoneLabel);
        centerPanel.add(phoneField);

        footerPanel = new JPanel();
        footerPanel.add(hideButton);

        contentPane.add(centerPanel, BorderLayout.CENTER);
        contentPane.add(footerPanel, BorderLayout.PAGE_END);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    } 

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new InvisiblePanel().displayGUI();
            }
        });
    }
}

您可以執行JFrame.invalidate()進行刷新。 請查看鏈接以獲取更多詳細信息。 對不同問題的類似要求。 實時刷新框架內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM