1

好吧,我对编程比较陌生,可能只是我错过了一些简单的事情,但是与该主题相关的其他线程没有提供与他们的问题相关的足够信息,以便其他人提供高质量的答案,所以我会给出试一试。

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 = {"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 的东西后,我得到了我那愚蠢的小蓝色面板,一旦添加它,我就会失去蓝色面板,并且组合框也不会显示出来......在这一点上打赌这是一个面部问题>。<

编辑:包括主要课程。

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

4

1 回答 1

3

您发布的类似 sscce 的代码(顺便说一下,不是真正的 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 教程。看看如何使用 Swing 组件


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


编辑 2
一些一般性建议:

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

编辑 3

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

于 2013-08-27T23:24:33.050 回答