延迟GUI预加载?-JAVA
我有一个体育程序,它应该对时间和名称进行排序,然后在GUI上显示它们。但是,GUI是在我实际调用它之前加载的,因此我更新的名称和时间都不会传输到GUI。有没有办法阻止GUI提前加载 这是我用来称呼它的延迟GUI预加载?-JAVA,java,swing,Java,Swing,我有一个体育程序,它应该对时间和名称进行排序,然后在GUI上显示它们。但是,GUI是在我实际调用它之前加载的,因此我更新的名称和时间都不会传输到GUI。有没有办法阻止GUI提前加载 这是我用来称呼它的 javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run() { DisplayGUI.runGUI(); }
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
DisplayGUI.runGUI();
}
});
这是GUI的实际代码
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
public class DisplayGUI implements ActionListener{
JFrame frame;
JPanel contentPane;
JComboBox sizeType;
JLabel sizeListPrompt, convertNew;
String alpWinner;
public DisplayGUI(){
/// Create and setup the frame
frame = new JFrame("2002 Winter Olympics");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Create a content pane with a BoxLayout and empty borders
contentPane = new JPanel();
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.PAGE_AXIS));
contentPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
// Create a combo box and descriptive label
sizeListPrompt = new JLabel("Select an event");
sizeListPrompt.setAlignmentX(JLabel.LEFT_ALIGNMENT);
contentPane.add(sizeListPrompt);
String[] names = {"Alpine Skiing", "Bobsleigh", "Curling","Figure Skating",
"Luge", "Skeleton", "Ski Jumping", "Snowboarding", "Speed Skating", "Super G"};
sizeType = new JComboBox(names);
sizeType.setAlignmentX(JComboBox.LEFT_ALIGNMENT);
sizeType.setSelectedIndex(0);
sizeType.addActionListener(this);
contentPane.add(sizeType);
// create and add a label that will display the Latin names
convertNew = new JLabel("Gold: \n Silver: \n Bronze: ");
convertNew.setBorder(BorderFactory.createEmptyBorder(20,10, 10, 10));
contentPane.add(convertNew);
//Add a content pane to the frame
frame.setContentPane(contentPane);
// size and display the frame
frame.pack();
frame.setVisible(true);
}
public void actionPerformed(ActionEvent event) {
JComboBox comboBox = (JComboBox)event.getSource();
String convertType = (String)comboBox.getSelectedItem();
AlpineSkiing apski = new AlpineSkiing();
Bobsleigh bob = new Bobsleigh();
Curling curl = new Curling();
FigureSkating fig = new FigureSkating();
SuperG g = new SuperG();
Luge l = new Luge();
Skeleton bones = new Skeleton();
SkiJumping jump = new SkiJumping();
Snowboarding board = new Snowboarding();
SpeedSkating speed = new SpeedSkating();
// alpWinner = apski.getWinners();
String alpwin;
String bobwin, curlwin, figwin, lugewin, boneswin, jumpwin, boardwin, speedwin, gwin;
//apski.theWinners = null;
if (convertType == "Alpine Skiing"){
//AlpineSkiing.createArray(apski.totalComp, apski.change, apski.counter);
convertNew.setText("The winners are:" +alpWinner);
} else if (convertType == "Bobsleigh"){
convertNew.setText(bob.getWinners());
} else if (convertType == "Curling"){
convertNew.setText(curl.getWinners());
} else if (convertType == "Figure Skating"){
convertNew.setText(fig.getWinners());
} else if (convertType == "Luge"){
convertNew.setText(l.getWinners());
} else if (convertType == "Skeleton"){
convertNew.setText(bones.getWinners());
} else if (convertType == "Ski Jumping"){
convertNew.setText(jump.getWinners());
} else if (convertType == "Snowboarding"){
convertNew.setText(board.getWinners());
} else if (convertType == "Speed Skating"){
convertNew.setText(speed.getWinners());
} else if (convertType == "Super G"){
convertNew.setText(g.getWinners());
}
}
public static void runGUI(){
JFrame.setDefaultLookAndFeelDecorated(true);
DisplayGUI myProgram = new DisplayGUI();
}
}
我认为您的问题在于比较
convertType
时。要比较内容时,您正在比较引用。要比较内容,请在每个else if
语句中使用convertType.equals(“您的字符串”)
,这将解决您的问题。例如,if(convertType.equals(“高山滑雪”){…}
确实解决了一小部分问题,但解决了主要问题。convertNew.setText(bob.getWinners());在控制台中正常工作后仍在加载null。请尝试调用frame.revalidate();
然后调用frame.repaint()
。这将更新GUI。