GUI在添加JComboBox时消失

时间:2013-08-27 21:53:33

标签: java swing user-interface 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 is String [] moo = {“Fish”,“Goat”,“Monkey”}; 一个虚拟字符串,仅用于测试目的并在开始时初始化。

所以我知道为什么当我放在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的东西被注释掉,我得到了我的愚蠢的小蓝色面板,一旦它被添加,我失去了蓝色面板,并且组合框也没有出现......投注这是一个facepalm问题此时&gt;。 &LT;

编辑:包括主要类。

编辑:取出JComboBox构造函数和实现者的注释标记

1 个答案:

答案 0 :(得分:3)

您发布的类似sscce(不是真正的SSCCE,因为我们无法运行它)代码不会将任何诸如JComboBox添加到JPanel并且不会将当前JPanel等组件添加到的JFrame。

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教程。看看How to Use Swing Components


修改
您的最新代码实际上确实将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个子弹。