Java Swing 在单击我要删除的 jpanel 中存在的 Jbutton 时删除 Jpanel

Posted

技术标签:

【中文标题】Java Swing 在单击我要删除的 jpanel 中存在的 Jbutton 时删除 Jpanel【英文标题】:Java Swing Removing Jpanel while clicking on Jbutton which is present in that jpanel which I want to remove 【发布时间】:2013-03-11 04:45:34 【问题描述】:

我正在使用 Netbeans 创建一个 GUI,我的问题是“如何删除 jpanel”... 层次顺序,因为它存在 Jframe->Jscrollpane->Jpanel->Jbutton。通过单击 Jbutton 我想删除 jpanel 的所有组件,包括 Jbutton(我正在单击)和面板本身。请提前帮助。紧急。谢谢

-赛扬坦

private void b4ActionPerformed(java.awt.event.ActionEvent evt)                                    
final JPanel jp;
JTextField tf,of1,of2,xf,yf;
int i=1;
int m=(int)sp3.getValue();
JButton jb;
jp=new JPanel();
//jp.setLayout(new GridBagLayout());
 DesignGridLayout layout = new DesignGridLayout(jp); 
  jsp2.getViewport().add(jp);  
   while(i<=m)
     tf=new JTextField(5);
     of1=new JTextField(5);
     of2=new JTextField(5);
    layout.row().grid(new JLabel("Type:")).indent(9).add(tf).grid(new     JLabel("Length:")).indent().add(of1).grid(new JLabel("Breadth:")).indent().add(of2).empty();
     fields1.add(tf);
     fields1.add(of1);
      fields1.add(of2);        
       xf=new JTextField(5);
     yf=new JTextField(5);
  layout.row().grid(new JLabel("X-axis:")).indent(9).add(xf).grid(new JLabel("Y-axis:")).indent().add(yf).empty(2);
      fields1.add(xf);
      fields1.add(yf);
      i++;
  
  jb=new JButton("Submit");
  jb.addActionListener(new ActionListener() 

        public void actionPerformed(ActionEvent e)
        
        for(JTextField field: fields1)
        String s=field.getText();
        lbr.setText(lbr.getText()+s);
        
         lb3.setVisible(false);
       sp3.setVisible(false);
        b4.setVisible(false);
       //jp.setVisible(false);
       //jp.removeAll();
      // jp.revalidate();

      //jp.repaint();

      // jsp2.remove(jp);
      //jsp2.revalidate();
      //jsp2.repaint();
      
    );
    layout.emptyRow();
    layout.row().right().add(jb);
   jp.revalidate();
   jp.repaint();
   // jsp2.revalidate();
   //jsp2.repaint();
                    

注意:我使用的是 DesignGridLayout 包。

【问题讨论】:

你可以更简单的示例代码。 目前正在发生什么(或没有发生什么?)告诉我们您目前的结果是什么,我们可以提供更好的帮助。 谁在教这些奇怪的用户界面概念? 哈哈哈@gilbert...我在自己制作这个界面时面临 @steve: 如果我使用的是 jpanel.renoveAll();只有 jbutton 被删除,一切都保持不变。 【参考方案1】:

这行得通:

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

public class ScratchSpace 

    public static void main(String[] args) 
        final JPanel panel = new JPanel();
        panel.setOpaque(true);
        panel.setBackground(Color.YELLOW);
        panel.add(new JButton(new AbstractAction("Kill me") 
            @Override
            public void actionPerformed(ActionEvent e) 
                panel.removeAll();
                panel.revalidate();
                panel.repaint();
            
        ));

        final JFrame frame = new JFrame();
        frame.setContentPane(panel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setVisible(true);
    


【讨论】:

移除面板本身怎么样? @史蒂夫 设计网格布局阻碍了它的执行......我得到这个错误:“线程“AWT-EventQueue-0”中的异常java.lang.IllegalArgumentException:不要在网络上使用这个方法。 java.dev.designgridlayout.DesignGridLayoutManager.removeLayoutComponent(DesignGridLayoutManager.java:122" 使用DesignGridLayout,您不能直接向面板添加或删除组件;您必须为此使用 DesignGridLayout API。 DesignGridLayout 无法在添加组件后删除它们,但如果需要,您可以hide() 行或行组 (RowGroup)。【参考方案2】:

我想删除 jpanel 的所有组件,包括 Jbutton(我正在单击)和面板本身。

然后你需要这样的代码:

JButton button = (JButtton)event.getSource();
JPanel grandparent = button.getParent().getParent();
grandparent.removeAll();
grandparent.revalidate();
grandparent.repaint();

尽管我质疑任何看到removeAll() 的代码。您可能会考虑使用Card Layout。

【讨论】:

在哪里使用您的代码? @camickr 我已经对 removeAll() 发表了评论,因为它没有发生。 因为您说要删除按钮和面板。 not happening 没有帮助。发布证明问题的 SSCCE。 当您不知道某个术语时,您可以随时搜索网络。为什么要等我 2 小时才能回复问题? 当您提出问题时,应将 SSCCE 与您的问题一起发布。

以上是关于Java Swing 在单击我要删除的 jpanel 中存在的 Jbutton 时删除 Jpanel的主要内容,如果未能解决你的问题,请参考以下文章

(转载) Java Swing 之 JScrollPane (滚动面板) 使用方法

Eclipse中jframe怎么用属性设背景图片

java swing GroupLayout - 如何交换组件的位置

Java Swing - GUI 的操作

java的学生成绩管理系统(swing环境)

如何在 Java Swing 中创建右键单击上下文菜单?