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