我想了解一下GUI设计人员。为此,我想从一个简单的程序开始,该程序有一个下拉菜单,其中包含项目。但是,由于某些原因,在执行时没有显示这些项。
package DSA;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
public class App {
public JPanel window_main;
public JComboBox<String> Klimaauswahl;
public App() {
Klimaauswahl.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
});
}
public static void main(String[] args) {
JFrame klima = new JFrame("Klimazone");
klima.setContentPane(new App().window_main);
klima.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
klima.pack();
klima.setVisible(true);
klima.setLocation(430, 100);
String[] klimazonen;
klimazonen = new String[]{ "Ewiges Eis", "Tundra", "Nördliche Steppen", "Nördliches
Hochland", "Kalkgebirge", "Mittelländische Gebirge", "Nördliche Wälder (Westküste)",
"Nördliche Wälder (Taiga)","Nördliche Wälder (Bornland)", "Nördliche Sümpfe",
"Mittelländisches Heideland", "Mittelländische Wälder", "Yaqirische Wälder", "Tobrische
Wälder", "Immergrüne Wälder", "Savanne", "Wüstenrandgebiete", "Wüste", "Südliche Gebirge",
"Maraskan", "Südliche Sümpfe", "Regenwald", "Regengebirge" };
final JComboBox<String> Klimaauswahl = new JComboBox<>(klimazonen);
klima.add(Klimaauswahl);
Klimaauswahl.setVisible(true);
}
}GUI表单本身包含一个名为"window_main“的JComboBox和一个名为"Klimaauswahl”的JComboBox。对不起,我用德语来表示变量和对象,但是对于我和使用代码的伙伴来说,这样更容易理解。
当我执行程序时,没有编译错误。但是我在控制台中得到以下消息:
Exception in thread "main" java.lang.NullPointerException
at m.intellij.uiDesigner.core.GridLayoutManager.addLayoutComponent(GridLayoutManager.java:134)
at java.awt.Container.addImpl(Container.java:1130)
at java.awt.Container.add(Container.java:1007)
at javax.swing.JFrame.addImpl(JFrame.java:567)
at java.awt.Container.add(Container.java:419)
at DSA.App.main(App.java:38)最后,程序被执行,但是下拉菜单是空的。我真的希望我提供了所有的信息。
发布于 2021-06-25 22:24:48
您将内容窗格设置为null,因为在使用window_main之前从未初始化过它。
对于要使用哪个Klimaauswahl (请不要用大写开始变量名)也有一些混淆。在App中有一个,还有另一个,实际上是在添加到框架的main()中初始化的。
我只能猜到你有点搞不懂这是什么。问问自己应用程序实例变量是什么,以及创建它们的目的是什么。
好的,下面是我从您的代码中创建的一些工作示例,希望您阅读我更改/添加/删除的内容,并从中解决它。
package dsa;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
public class App {
public static void main(String[] args) {
JFrame klima = new JFrame("Klimazone");
JPanel actualContentPane = new JPanel();
final JLabel sampleLabel = new JLabel( "Initialized text" );
String[] klimazonen = { "Ewiges Eis", "Tundra", "Nördliche Steppen", "Nördliches Hochland",
"Kalkgebirge", "Mittelländische Gebirge", "Nördliche Wälder (Westküste)",
"Nördliche Wälder (Taiga)","Nördliche Wälder (Bornland)", "Nördliche Sümpfe",
"Mittelländisches Heideland", "Mittelländische Wälder", "Yaqirische Wälder", "Tobrische Wälder",
"Immergrüne Wälder", "Savanne", "Wüstenrandgebiete", "Wüste", "Südliche Gebirge",
"Maraskan", "Südliche Sümpfe", "Regenwald", "Regengebirge" };
final JComboBox<String> klimaauswahl = new JComboBox<>(klimazonen);
klimaauswahl.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
sampleLabel.setText( klimaauswahl.getSelectedItem().toString() );
}
});
klima.setContentPane( actualContentPane );
klima.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
klima.setLocation(430, 100);
klima.setSize( 300, 300 );
klima.getContentPane().add(klimaauswahl);
klima.getContentPane().add(sampleLabel);
klima.setVisible(true);
}
}https://stackoverflow.com/questions/68137399
复制相似问题