Java 添加JComboBox时GUI消失

Java 添加JComboBox时GUI消失,java,swing,user-interface,jcombobox,Java,Swing,User Interface,Jcombobox,好吧,我对编程比较陌生,可能只是我遗漏了一些简单的东西,但是与这个主题相关的其他线程海报没有提供足够的关于他们问题的信息,以便其他人提供高质量的答案,所以我将试一试 public BenchUI(JFrame j){ jf = j; init(); add(mainPanel); topPanelButtons(); selectedCustomer(); rentalOptions(); clientLi

好吧,我对编程比较陌生,可能只是我遗漏了一些简单的东西,但是与这个主题相关的其他线程海报没有提供足够的关于他们问题的信息,以便其他人提供高质量的答案,所以我将试一试

public BenchUI(JFrame j){
    jf = j;
    init();     
    add(mainPanel);     
    topPanelButtons();  
    selectedCustomer();     
    rentalOptions();
    clientListBox();

}
在这一点上,我可以指出,在添加clientListBox()方法之前,一切都是完美的。(下文)

我可以对它进行注释,使整个GUI恢复正常工作,但不需要JComboBox

moo是字符串[]moo={“鱼”、“山羊”、“猴子”}; 仅用于测试目的并在开始时初始化的伪字符串

那么,你知道为什么我的GUI在加入客户列表时完全消失了吗

如果还有什么需要的话,我会关注这个帖子,并且可以提供额外的信息


作为旁注,我一直收到关于“原始类型”的警告,但它在没有指定的情况下工作,如果没有指定JComboBox,我可能会遇到麻烦吗

编辑:

好的,我相信我已经复制了这段代码中的任何问题

import javax.swing.JFrame;
import javax.swing.*;
import java.awt.*;


public class main {

    public static void main(String[] args){
        JFrame jf = new JFrame();

        jf.setExtendedState(JFrame.MAXIMIZED_BOTH);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setResizable(false);

        BenchUI bu = new BenchUI(jf);
        jf.add(bu);
    }



}



    public class BenchUI extends JPanel{

    JPanel one;
    JFrame jf;
    JComboBox<String> clientList;
    String[] moo = {"Goat", "Fish", "Donkey"};

    public BenchUI(JFrame j){
        jf = j;

        one = new JPanel(new GridBagLayout());
        one.setBackground(Color.blue);
        one.setPreferredSize(new Dimension(300,300));

        clientList = new JComboBox<String>(moo);
        one.add(clientList);

        add(one);
    }
}
import javax.swing.JFrame;
导入javax.swing.*;
导入java.awt.*;
公共班机{
公共静态void main(字符串[]args){
JFrame jf=新JFrame();
setExtendedState(JFrame.MAXIMIZED_两者);
jf.setVisible(真);
jf.setDefaultCloseOperation(JFrame.EXIT\u ON\u CLOSE);
jf.可设置大小(false);
本水bu=新本水(jf);
jf.add(bu);
}
}
公营班车扩展JPanel{
JPanel一号;
jf框架;
JComboBox客户端列表;
字符串[]moo={“山羊”、“鱼”、“驴”};
公共便池(JJ){
jf=j;
一个=新的JPanel(新的GridBagLayout());
一、挫折背景(颜色:蓝色);
一、设置首选尺寸(新尺寸(300300));
clientList=newjcombobox(moo);
一、增加(客户列表);
增加(一);
}
}

随着clientList的内容被评论掉,我得到了一个愚蠢的蓝色小面板,一旦它被添加,我就失去了蓝色面板,组合框也不会出现……在这一点上打赌是一个facepalm问题>你发布的类似SSCE的帖子(顺便说一句,这不是一个真正的SSCE,因为我们无法运行它)代码不向JPanel添加任何组件,例如JComboBox,也不向JFrame添加任何组件,例如当前JPanel

public class BenchUI extends JPanel{

  JPanel one;
  JFrame jf;
  JComboBox<String> clientList;
  String[] moo = {"Goat", "Fish", "Donkey"};

  public BenchUI(JFrame j){
    jf = j;

    one = new JPanel(new GridBagLayout());
    one.setBackground(Color.blue);
    one.setPreferredSize(new Dimension(300,300));

    //clientList = new JComboBox<String>(moo);
    //one.add(clientList);

    add(one);
  }
}
公共类扩展JPanel{
JPanel一号;
jf框架;
JComboBox客户端列表;
字符串[]moo={“山羊”、“鱼”、“驴”};
公共便池(JJ){
jf=j;
一个=新的JPanel(新的GridBagLayout());
一、挫折背景(颜色:蓝色);
一、设置首选尺寸(新尺寸(300300));
//clientList=newjcombobox(moo);
//一、增加(客户列表);
增加(一);
}
}
因此,所有组件都不会出现在任何JFrame上是有意义的。您需要阅读Swing教程,了解如何将组件添加到其他组件(或容器)以及如何创建和显示JFrame。看一看


编辑
您的最新代码现在确实将BenchUI JPanel添加到JFrame中,但仍然没有向BenchUI JPanel添加任何组件,事实上您甚至没有构造JComboBox,只创建了一个JComboBox变量。我再次强烈建议您阅读我上面链接的Swing教程以及通用Java教程


编辑2
一些一般性建议:

  • 如果要将组件添加到GUI,必须首先创建组件对象。您正在声明clientList JComboBox,但从未创建对象
  • 然后,必须将组件对象添加到容器中,该容器最终将成为顶层窗口(如JFrame、JDialog、JApplet等)的层次结构的一部分。您从未将clientList对象添加到GUI
  • 在调用顶层窗口上的
    pack()
    之前,您应该将组件添加到顶层窗口,这会告诉所有布局管理器布局它们所持有的所有组件
  • 然后应调用
    setVisible(true)
    。代码的一个问题(除了不创建重要组件和不将它们添加到GUI!)是,在向GUI添加任何内容之前,在JFrame上调用
    setVisible(true)
    太早了
  • 阅读Swing教程,尤其是关于使用布局管理器和向顶级窗口添加组件的教程。
编辑3


好的,现在您正在创建JComboBox,但在将其设置为可见后,仍然将所有组件添加到JFrame中。请重新检查上面项目符号列表中的第3个和第4个项目符号。

“作为旁注,我一直收到“原始类型”的警告,但它没有指定…”作为一般规则,如果您收到警告,并且您不确定为什么收到这些警告,或者忽略它们是否安全,那么,假设这是一件值得担心的事情就安全多了。最糟糕的情况是,你学到了一些关于Java的新知识。如果你读过其他线程,那么我相信你以前也遇到过这个建议。丹尼斯-哈哈,这很有意义,我确实学到了一些关于在元素类型中添加警告的知识,我认为无论哪种方式,它都不会伤害我的程序,因为它是simplicitycamickr-我不太确定如何提供正确的示例。据我所知,只需在面板中放置一个组合框,所有操作都可以完美地添加clientListBox()。(SSCCE是一个新术语,必须查找:P)除非你能发布SSCCE,否则我们无法帮助你。您给我们的只是几个方法名。我们不是读心术的人。我们无法猜测这些方法的作用。同样,这些方法甚至与这个问题有关。SSCCE的要点是从展示问题的最少代码开始。尝试跟踪所有更新+1。基于以下代码:
public class BenchUI extends JPanel{

  JPanel one;
  JFrame jf;
  JComboBox<String> clientList;
  String[] moo = {"Goat", "Fish", "Donkey"};

  public BenchUI(JFrame j){
    jf = j;

    one = new JPanel(new GridBagLayout());
    one.setBackground(Color.blue);
    one.setPreferredSize(new Dimension(300,300));

    //clientList = new JComboBox<String>(moo);
    //one.add(clientList);

    add(one);
  }
}