簡體   English   中英

GUI在添加JComboBox時消失

[英]GUI Disappearing when I add 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 = {“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問題>。

編輯:包括主類。

編輯:取出JComboBox構造函數和實現者的注釋標記

您發布的類似sscce(不是真正的SSCCE,因為我們無法運行它)代碼不會將任何諸如JComboBox添加到JPanel,並且不會向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之外!)就是您在向GUI添加任何內容之前過早地在JFrame方式上調用setVisible(true)
  • 閱讀Swing教程,特別是關於使用布局管理器和將組件添加到頂級窗口的教程。

編輯3

好的,現在您正在創建JComboBox,但是將其設置為可見之后 ,您仍然會將所有組件添加到JFrame中。 請重新檢查上面子彈列表中的第3和第4個子彈。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM