GUI在我添加JComboBox时消失



好吧,我对编程相对陌生,可能只是缺少一些简单的东西,但与这个主题相关的其他线程——海报没有提供足够的信息,让其他人提供高质量的答案,所以我会试一试。

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

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

public void clientListBox(){
    clientList = new JComboBox(moo);
    clientList.setPreferredSize(new Dimension(460,30));
    gbc.gridx = 0;
    gbc.gridy = 0;
    leftSide.add(clientList,gbc);
}

我可以把它注释出来,让我的整个GUI恢复正常工作,但没有JComboBox。

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

那么,你知道为什么当我放在clientList中时,我的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);
    }
}

随着clientList的东西被评论掉,我得到了我愚蠢的蓝色小面板,一旦添加它,我就会失去蓝色面板,组合框也不会出现。。。在这一点上下注是一个掌上明珠的问题><

EDIT:包括主类。

EDIT:去掉了JComboBox构造函数和实现程序的注释标记

您发布的类似ssce的代码(顺便说一句,由于我们无法运行它,所以不是真正的sscce)不会向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);
  }
}

因此,任何组件都不会出现在任何JFrame上是有道理的。您将希望阅读有关如何将组件添加到其他组件(或容器)以及如何创建和显示JFrame的Swing教程。看看如何使用摆动组件。


编辑
事实上,您的最新代码现在确实向JFrame添加了BenchUI JPanel,但仍然没有向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个项目符号。

最新更新