如何 show/hide JFrame 中的另一个 JPanel 之上的 JPanel?
How to show/hide JPanel on top of another JPanel in a JFrame?
我有一个重新组合一些 JPanel 的主框架。我的 JFrame 完全填满了。
我希望能够 show/hide 在我左侧的 JFrame 中的另一个 JPanel 之上放置一个小 JPanel。此 JPanel 是用户的配置区域。
所以这是我的问题,在我的 JFrame 中,在其他所有内容之上的小区域中显示 JPanel 的最佳方式是什么?
我试过了,但没有按预期工作(这是点击设置图标时执行的代码):
private void jLabelSettingsMouseClicked(java.awt.event.MouseEvent evt) {
settingsActive = !this.jLabelEmargement.isVisible();
if(!settingsActive){
FSettings.setSize(222, 380);
FSettings.setLocation(0, 150);
FSettings.setVisible(true);
FSettings.setBackground(new Color(226,236,241));
this.add(FSettings,BorderLayout.CENTER);
this.frameLearners.setVisible(false);
this.jLabelEmargement.setVisible(false);
this.jLabelFinalEval.setVisible(false);
this.jLabelLeaners.setVisible(false);
}
else{
FSettings.setVisible(false);
this.frameLearners.setVisible(true);
this.jLabelEmargement.setVisible(true);
this.jLabelFinalEval.setVisible(true);
this.jLabelLeaners.setVisible(true);
}
}
谢谢!
您可以用玻璃板覆盖框架内容。
http://www.java2s.com/Code/Java/Swing-JFC/DemonstrateuseofGlassPane.htm
JFrame myFrame = ...
JComponent glassPane = new JPanel(null);
myFrame.setGlassPane(glassPane);
private void jLabelSettingsMouseClicked(java.awt.event.MouseEvent evt) {
settingsActive = !this.jLabelEmargement.isVisible();
if(!settingsActive){
FSettings.setSize(222, 380);
FSettings.setLocation(0, 150);
FSettings.setBackground(new Color(226,236,241));
glassPane.add(FSettings);
this.frameLearners.setVisible(false);
this.jLabelEmargement.setVisible(false);
this.jLabelFinalEval.setVisible(false);
this.jLabelLeaners.setVisible(false);
}
else{
glassPane.remove(FSettings);
this.frameLearners.setVisible(true);
this.jLabelEmargement.setVisible(true);
this.jLabelFinalEval.setVisible(true);
this.jLabelLeaners.setVisible(true);
}
}
我正在使用它来显示 JFrame
内的效果或标记。
感谢 brainiac 我想到了这个解决方案,它按预期工作:
public void toggleSettings(){
if(this.jLabelEmargement.isVisible()){
// Set size of JPanel
FSettings.setSize(222, 380);
// Set location of JPanel
FSettings.setLocation(0, 150);
// Show JPanel
FSettings.setVisible(true);
FSettings.setBackground(new Color(226,236,241));
// Add JPanel to LayeredPane
jLayeredPaneSettings.add(FSettings, new Integer(5));
this.frameLearners.setVisible(false);
this.jLabelEmargement.setVisible(false);
this.jLabelFinalEval.setVisible(false);
this.jLabelLeaners.setVisible(false);
ImageIcon icon = new ImageIcon(getClass().getResource("/com/images/cog_00997d_28.png"));
jLabelSettings.setIcon(icon);
}
else{
// Hide JPanel
FSettings.setVisible(false);
// Remove from LayeredPane
jLayeredPaneSettings.remove(FSettings);
this.frameLearners.setVisible(true);
this.jLabelEmargement.setVisible(true);
this.jLabelFinalEval.setVisible(true);
this.jLabelLeaners.setVisible(true);
ImageIcon icon = new ImageIcon(getClass().getResource("/com/images/cog_000000_28.png"));
jLabelSettings.setIcon(icon);
}
}
您只需要将 您想要 hide/show 的所有组件 放入 LayeredPane
。
我有一个重新组合一些 JPanel 的主框架。我的 JFrame 完全填满了。
我希望能够 show/hide 在我左侧的 JFrame 中的另一个 JPanel 之上放置一个小 JPanel。此 JPanel 是用户的配置区域。
所以这是我的问题,在我的 JFrame 中,在其他所有内容之上的小区域中显示 JPanel 的最佳方式是什么?
我试过了,但没有按预期工作(这是点击设置图标时执行的代码):
private void jLabelSettingsMouseClicked(java.awt.event.MouseEvent evt) {
settingsActive = !this.jLabelEmargement.isVisible();
if(!settingsActive){
FSettings.setSize(222, 380);
FSettings.setLocation(0, 150);
FSettings.setVisible(true);
FSettings.setBackground(new Color(226,236,241));
this.add(FSettings,BorderLayout.CENTER);
this.frameLearners.setVisible(false);
this.jLabelEmargement.setVisible(false);
this.jLabelFinalEval.setVisible(false);
this.jLabelLeaners.setVisible(false);
}
else{
FSettings.setVisible(false);
this.frameLearners.setVisible(true);
this.jLabelEmargement.setVisible(true);
this.jLabelFinalEval.setVisible(true);
this.jLabelLeaners.setVisible(true);
}
}
谢谢!
您可以用玻璃板覆盖框架内容。
http://www.java2s.com/Code/Java/Swing-JFC/DemonstrateuseofGlassPane.htm
JFrame myFrame = ...
JComponent glassPane = new JPanel(null);
myFrame.setGlassPane(glassPane);
private void jLabelSettingsMouseClicked(java.awt.event.MouseEvent evt) {
settingsActive = !this.jLabelEmargement.isVisible();
if(!settingsActive){
FSettings.setSize(222, 380);
FSettings.setLocation(0, 150);
FSettings.setBackground(new Color(226,236,241));
glassPane.add(FSettings);
this.frameLearners.setVisible(false);
this.jLabelEmargement.setVisible(false);
this.jLabelFinalEval.setVisible(false);
this.jLabelLeaners.setVisible(false);
}
else{
glassPane.remove(FSettings);
this.frameLearners.setVisible(true);
this.jLabelEmargement.setVisible(true);
this.jLabelFinalEval.setVisible(true);
this.jLabelLeaners.setVisible(true);
}
}
我正在使用它来显示 JFrame
内的效果或标记。
感谢 brainiac 我想到了这个解决方案,它按预期工作:
public void toggleSettings(){
if(this.jLabelEmargement.isVisible()){
// Set size of JPanel
FSettings.setSize(222, 380);
// Set location of JPanel
FSettings.setLocation(0, 150);
// Show JPanel
FSettings.setVisible(true);
FSettings.setBackground(new Color(226,236,241));
// Add JPanel to LayeredPane
jLayeredPaneSettings.add(FSettings, new Integer(5));
this.frameLearners.setVisible(false);
this.jLabelEmargement.setVisible(false);
this.jLabelFinalEval.setVisible(false);
this.jLabelLeaners.setVisible(false);
ImageIcon icon = new ImageIcon(getClass().getResource("/com/images/cog_00997d_28.png"));
jLabelSettings.setIcon(icon);
}
else{
// Hide JPanel
FSettings.setVisible(false);
// Remove from LayeredPane
jLayeredPaneSettings.remove(FSettings);
this.frameLearners.setVisible(true);
this.jLabelEmargement.setVisible(true);
this.jLabelFinalEval.setVisible(true);
this.jLabelLeaners.setVisible(true);
ImageIcon icon = new ImageIcon(getClass().getResource("/com/images/cog_000000_28.png"));
jLabelSettings.setIcon(icon);
}
}
您只需要将 您想要 hide/show 的所有组件 放入 LayeredPane
。