【问题标题】:Java JFrame Removing Components Weirdly by AccidentJava JFrame 意外地奇怪地删除组件
【发布时间】:2020-04-10 21:00:53
【问题描述】:

我的 Java JFrame 项目的组件有问题,删除了 JComboBox 在空间中使用的所有内容。

我的程序中的错误视频示例可以直观地查看here

主要代码如下。您可以通过将 3 个面板替换为 random JCombobox(es) 并使用主类来调用它来复制它。

任何帮助将不胜感激。

package com.company;

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

public class DisplayPage extends JFrame implements ActionListener {

    EnterDetailsPage newRecord;
    ViewMore viewMoreRecord;
    ViewPage viewRecord;
    JPanel contentPanel = new JPanel(new FlowLayout());

    public DisplayPage(){
        setLayout(new BorderLayout());
        setSize(900, 600);
        setTitle("Add Flight Details");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setPage(1);
        MenuSection menuSection = new MenuSection();

        //Add action listener to buttons
        menuSection.addNewButton.addActionListener(this::addActionPerformed);
        menuSection.updateButton.addActionListener(this::updateActionPerformed);
        menuSection.viewButton.addActionListener(this::viewActionPerformed);

        add("West", menuSection.getMainMenu());
        add("Center", contentPanel);
        setVisible(true);
    }

    public void setPage(int selection){
        contentPanel.removeAll();
        contentPanel.revalidate();
        //contentPanel.repaint();
        switch (selection) {
            case 1:
                newRecord = new EnterDetailsPage();
                contentPanel = newRecord.getTotalPanel();
                break;
            case 2:
                viewMoreRecord = new ViewMore();
                contentPanel = viewMoreRecord.getViewMorePanel();
                break;
            case 3:
                viewRecord = new ViewPage();
                contentPanel = viewRecord.getUpdatePagePanel();
                break;
        }
        add("Center", contentPanel);
    }

    public void actionPerformed(ActionEvent e){

    }

    public void addActionPerformed(ActionEvent e){
        setPage(1);
    }

    public void updateActionPerformed(ActionEvent e){
        setPage(2);
    }

    public void viewActionPerformed(ActionEvent e){
        setPage(3);
    }
}

【问题讨论】:

    标签: java swing jframe jpanel jcombobox


    【解决方案1】:

    不要费心制作自己的 GUI,而是始终查看 java 文档以检查是否有任何与您想要使用的类似的东西。 已经有了 JTabbedPanes,而不是制作自己的“MenuSection”,您可以更轻松地使用它(没有闪烁和其他图形问题)。 https://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html

    或者,您可以使用 CardLayout。 https://docs.oracle.com/javase/tutorial/uiswing/layout/card.html

    卡片布局示例:

    public class DisplayPage extends JFrame implements ActionListener {
     ...
    
        CardLayout cl;
     ...
    
        public DisplayPage(){
         ...
    
            cl = new CardLayout();
            contentPanel.setLayout(cl);
         ...
    
            contentPanel.add(newRecord,"newRecord");
            contentPanel.add(viewMoreRecord,"viewMoreRecord");
            contentPanel.add(viewRecord,"viewRecord");
         ...
            cl.show(contentPanel,"newRecord");
         }
    
    
        public void addActionPerformed(ActionEvent e){
            cl.show(contentPanel,"newRecord");
        }
    
        public void updateActionPerformed(ActionEvent e){
            cl.show(contentPanel,"viewMoreRecord");
        }
    
        public void viewActionPerformed(ActionEvent e){
            cl.show(contentPanel,"viewRecord");
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多