【问题标题】:Why is the jframe not being cleared?为什么jframe没有被清除?
【发布时间】:2016-12-21 15:59:52
【问题描述】:

这是一个奇怪的情况。我删除框架的内容并添加新内容。
但是旧的内容被添加了两次。为什么会这样?
这可能看起来像很长的代码,但其中大部分是为框架生成内容。
问题,正如我所看到的,从 addUserFrame()ActionListener 调用 manager() 函数时开始/em> 函数。

public class adminManager {
    private static Connection con;
    private static Statement stmt;
    private static JFrame f;
    private static JPanel p = new JPanel(); 
    private static JButton addUser,exitTest,addTest,editTest;   

    public static void manager(JFrame frame)
   {
    f=frame;f.setSize(400,800);
    p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
    Dimension d = new Dimension(100,30);
    addUser = new JButton("ADD USER");
    exitTest = new JButton("EXIT");
    addTest =  new JButton("ADD TEST");
    editTest = new JButton("EDIT TEST");
    p.add(addUser);p.add(addTest);
    p.add(editTest);p.add(exitTest);
    f.setTitle("Select Option");
    f.setLayout(new FlowLayout());
    f.add(p);   
    f.setVisible(true);     
    f.setResizable(false);
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    bindEvents();
  }

    public static void addUserFrame(JFrame f)
   {        
    JPanel p1 = new JPanel();
    JPanel p2 = new JPanel();
    JPanel p3 = new JPanel();J
    Panel parentPanel = new JPanel();
    JLabel l1 = new JLabel("Enter User-Name");
    JLabel l2 = new JLabel("Enter Password");
    JTextField t1 = new JTextField(10);
    JTextField t2 = new JTextField(10);
    JButton btn = new JButton("Submit");
    JButton back = new JButton("Go Back");
    p1.setLayout(new FlowLayout(FlowLayout.CENTER));
    p2.setLayout(new FlowLayout(FlowLayout.CENTER));
    p3.setLayout(new FlowLayout(FlowLayout.CENTER));
    parentPanel.setLayout(new BoxLayout(parentPanel,BoxLayout.Y_AXIS));
    p1.setSize(200,100);
    p2.setSize(200,100);
    p3.setSize(200,100);
    p1.add(l1);p1.add(t1);
    p2.add(l2);p2.add(t2);
    p3.add(btn);p3.add(back);
    parentPanel.add(p1);parentPanel.add(p2);parentPanel.add(p3);
    f.add(parentPanel);
    back.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){             
            f.getContentPane().removeAll();f.repaint();
            manager(f);             
        }
    });

}

public static void bindEvents(){
    addUser.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            f.getContentPane().removeAll();
            f.repaint();    
            addUserFrame(f);
            f.setSize(400, 150);
            f.setTitle("Add User");
            f.setVisible(true);             
        }
    });
    }

public static void main(String []args){
    manager(new JFrame());
    }
}

更新:

通过将p=new JPanel()移动到manager()方法解决

【问题讨论】:

  • (1-) 我敢肯定,您不会在每一行编写包含多个语句的代码,从而使代码无法阅读和维护。所以不要指望我们会在论坛上阅读这样的代码。发布格式正确的代码。
  • @camickr done.now 让我们看看你是否能回答它
  • 另外,请遵守 Java 语言约定:类名应以大写字母开头。
  • 这不是@camickr 所说的,他的意思是:p.add(addUser);p.add(addTest); 为什么在同一行上有两个语句?他指的不是与if () { 在同一行的花括号,而是我向您展示的那些!
  • @Frakcool 感谢您的帮助。我的错误和一个愚蠢的错误。解决了它。

标签: java swing layout-manager


【解决方案1】:
f.getContentPane().removeAll();

您从框架中删除了面板p,但在manager() 方法中,您添加了相同的p,您在其中添加了新元素。您必须在p 上致电clear() 或创建一个新面板p

【讨论】:

  • 旧内容显示两次
  • @Pradeep 请将您问题中的代码增强为MCVE
【解决方案2】:

问题是使用了相同的 JPanel。
通过将p=new JPanel() 移动到manager() 方法来解决它

【讨论】:

    猜你喜欢
    • 2019-12-07
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 2016-06-16
    • 2016-02-09
    相关资源
    最近更新 更多