我想隐藏选定的面板,当点击一个按钮时。我有大部分的工作,但当面板是假的不更新。如何隐藏Jpanel后更新Jframe
这我已经试过的事情之一:
compsToExperiment.setVisible(mapVis);
updateUI();
private void updateUI() {
SwingUtilities.updateComponentTreeUI(this);
}
这是在正确的轨道上? 还有其他的方法吗?
我想隐藏选定的面板,当点击一个按钮时。我有大部分的工作,但当面板是假的不更新。如何隐藏Jpanel后更新Jframe
这我已经试过的事情之一:
compsToExperiment.setVisible(mapVis);
updateUI();
private void updateUI() {
SwingUtilities.updateComponentTreeUI(this);
}
这是在正确的轨道上? 还有其他的方法吗?
updateComponentTreeUI()
不强制重绘。您必须使用repaint
方法。
compsToExperiment.setVisible(mapVis);
frame.repaint();
其中frame
是面板所在的顶部窗口。
你可以做JFrame.invalidate()刷新。查看链接了解更多详情。针对不同问题的类似要求。 refresh the contents of frame in real time
你不需要做点什么花哨的事情,除此之外在JPanel
上打电话setVisible(false);
。以下示例证明:
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();
}
});
}
}
+1可能比JToggleButton更好,或者使用三元运算符 – mKorbel
可能是错误的轨道:通常,应用程序代码中都不需要updateUI和updateComponentTreeUI。一个例外是切换LAF。为了帮助,我们需要更多的上下文,最好的SSCCE – kleopatra
这些新的片段远不是SSCCE ......他们甚至不包含改变可视性的部分。 – kleopatra
SSCCE ... SSCCE ... SSCCE ...必需。没有SSCCE,当然没有帮助 - 你的决定。 – kleopatra