为什么我的某些组件(例如Jlabel和Jcombobox)有时在使用Jbutton后不会出现?
我正在尝试通过将JPanel(菜单)添加到框架并隐藏当前可见的面板(背景),从主屏幕过渡到选项菜单。我正在使用动作听众激活过渡。 有时在运行代码时(大多数时间更像),菜单的某些部分不会出现,例如Jcombobox和两个Jlabels。我没有JSlider的问题不过,但是我无法确定其他组件的问题。我尝试在我的代码末尾实现菜单
和菜单>菜单>菜单。我还尝试执行frame.revalidate()
和frame.setvisible(true)
。解决此问题的另一个尝试是绕菜单移动。
我使用的代码作为提供的
窗口。Java
JFrame frame;
JPanel background;
JPanel menu;
JSlider difficulty;
JLabel difficultyLabel;
JComboBox exerciseChoice;
JPanel dropDownPanel;
JLabel exerciseChoiceLabel;
JPanel difficultyPanel;
public ActionListener startButtonPressed() throws IOException {
ActionListener temp =
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
background.setVisible(false);
menu = new JPanel();
menu.setLayout(new BoxLayout (menu, BoxLayout.Y_AXIS));
menu.setBounds(menu.getLocation().x+50, 50, 700, 100);
menu.setBackground(Color.WHITE);
startButton.setEnabled(false);
createDifficultySlider();
createWorkoutDropDown();
frame.add(menu);
frame.setVisible(true);
} catch (IOException r) {}
}
};
return temp;
}
public void createWorkoutDropDown() throws IOException {
dropDownPanel = new JPanel();
dropDownPanel.setLayout(new FlowLayout(FlowLayout.LEADING));
dropDownPanel.setBackground(Color.WHITE);
String[] choices = {"Abs", "Cardio", "Full Body", "Upper Body", "Stretches", "Lower Body"};
exerciseChoice = new JComboBox(choices);
exerciseChoice.setFont(new Font("Verdana", Font.PLAIN, 20));
exerciseChoiceLabel = new JLabel("Workout Options");
exerciseChoiceLabel.setFont(new Font("Verdana", Font.PLAIN, 20));
dropDownPanel.add(exerciseChoiceLabel);
dropDownPanel.add(exerciseChoice);
menu.add(dropDownPanel);
}
public void createDifficultySlider() throws IOException {
difficultyPanel = new JPanel();
difficultyPanel.setLayout(new FlowLayout(FlowLayout.LEADING));
difficultyPanel.setBackground(Color.WHITE);
difficulty = new JSlider(JSlider.HORIZONTAL, 1, 10, 5);
difficulty.setPreferredSize(new Dimension(difficulty.getPreferredSize().width + 60, difficulty.getPreferredSize().height + 5));
difficultyLabel = new JLabel("Difficulty Level (Easy 1- Hard 10)");
difficultyLabel.setFont(new Font("Verdana", Font.PLAIN, 20));
difficulty.setFont(new Font("Verdana", Font.PLAIN, 10));
difficulty.setMajorTickSpacing(1);
difficulty.setPaintLabels(true);
difficulty.setPaintTicks(true);
difficulty.setSnapToTicks(true);
difficultyPanel.add(difficultyLabel, BorderLayout.PAGE_START);
difficultyPanel.add(difficulty, BorderLayout.LINE_START);
menu.add(difficultyPanel);
}
编辑:我不得不扔IOExceptions,因为我正在从驱动器中导入字体。
I'm trying to transition from the home screen to the option menu through a JButton by adding a JPanel (menu) to the frame and hiding the currently visible panel (background). I'm using an Action Listener to activate the transition. Sometimes when running the code (more like most of the time), some parts of the menu won't appear such as the JComboBox and two of the JLabels. I'm not having an issue with the JSlider though, but I haven't been able to identify the problem for the other components. I tried implementing menu.revalidate()
and menu.setVisible(true)
at the end of my code, but to no prevail. I also tried doing frame.revalidate()
and frame.setVisible(true)
. Another attempt at fixing this was by moving around the menu.add([insert JLabel/JComboBox])
.
The code that I used is as provided
Window.java
JFrame frame;
JPanel background;
JPanel menu;
JSlider difficulty;
JLabel difficultyLabel;
JComboBox exerciseChoice;
JPanel dropDownPanel;
JLabel exerciseChoiceLabel;
JPanel difficultyPanel;
public ActionListener startButtonPressed() throws IOException {
ActionListener temp =
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
background.setVisible(false);
menu = new JPanel();
menu.setLayout(new BoxLayout (menu, BoxLayout.Y_AXIS));
menu.setBounds(menu.getLocation().x+50, 50, 700, 100);
menu.setBackground(Color.WHITE);
startButton.setEnabled(false);
createDifficultySlider();
createWorkoutDropDown();
frame.add(menu);
frame.setVisible(true);
} catch (IOException r) {}
}
};
return temp;
}
public void createWorkoutDropDown() throws IOException {
dropDownPanel = new JPanel();
dropDownPanel.setLayout(new FlowLayout(FlowLayout.LEADING));
dropDownPanel.setBackground(Color.WHITE);
String[] choices = {"Abs", "Cardio", "Full Body", "Upper Body", "Stretches", "Lower Body"};
exerciseChoice = new JComboBox(choices);
exerciseChoice.setFont(new Font("Verdana", Font.PLAIN, 20));
exerciseChoiceLabel = new JLabel("Workout Options");
exerciseChoiceLabel.setFont(new Font("Verdana", Font.PLAIN, 20));
dropDownPanel.add(exerciseChoiceLabel);
dropDownPanel.add(exerciseChoice);
menu.add(dropDownPanel);
}
public void createDifficultySlider() throws IOException {
difficultyPanel = new JPanel();
difficultyPanel.setLayout(new FlowLayout(FlowLayout.LEADING));
difficultyPanel.setBackground(Color.WHITE);
difficulty = new JSlider(JSlider.HORIZONTAL, 1, 10, 5);
difficulty.setPreferredSize(new Dimension(difficulty.getPreferredSize().width + 60, difficulty.getPreferredSize().height + 5));
difficultyLabel = new JLabel("Difficulty Level (Easy 1- Hard 10)");
difficultyLabel.setFont(new Font("Verdana", Font.PLAIN, 20));
difficulty.setFont(new Font("Verdana", Font.PLAIN, 10));
difficulty.setMajorTickSpacing(1);
difficulty.setPaintLabels(true);
difficulty.setPaintTicks(true);
difficulty.setSnapToTicks(true);
difficultyPanel.add(difficultyLabel, BorderLayout.PAGE_START);
difficultyPanel.add(difficulty, BorderLayout.LINE_START);
menu.add(difficultyPanel);
}
EDIT: I had to throw IOExceptions because I was importing fonts from my drive.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论