Я пытаюсь добавить компоненты в JFrame, но когда я запускаю GameMenu.java, отображается только мой ImageIcon. Я создал экземпляр setVisible ();, в частности после. Я установил свой фрейм или добавил компоненты на панели или строки меню. Поэтому я не уверен, почему не отображаются никакие компоненты. Я думаю, это может быть связано с моим форматированием или основным методом.
Вот мои два класса:
GameMenu.java:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
public class GameMenu{
public static void main(String[] args) {
FrameCaller obj = new FrameCaller();
}
}
class FrameCaller extends JFrame {
public FrameCaller(){
setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(new JLabel(new ImageIcon("logo.png")));
pack();
setLocationRelativeTo(null);
JMenuBar mb = new JMenuBar();
JMenu m1 = new JMenu("Game List");
JMenu m2 = new JMenu("Help");
JMenu m3 = new JMenu("Stats");
mb.add(m1);
mb.add(m2);
mb.add(m3);
JMenuItem showRulesButton = new JMenuItem("View game rules");
m2.add(showRulesButton);
JMenuItem m77 = new JMenuItem("View past game stats");
m3.add(m77);
mb.setVisible(true);
JPanel panel = new JPanel();
JButton newGameButton = new JButton("New Game");
newGameButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new inGameFrame();
dispose();
}
});
panel.add(newGameButton);
panel.setVisible(true);
setVisible(true);
}
}
EightOff.java:
import javax.swing.*;
public class EightOff {
public static void main(String[] args)
{
inGameFrame obj = new inGameFrame();
}
}
class inGameFrame extends JFrame
{
public inGameFrame() {
setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
}
Любые советы были бы замечательными. Спасибо.
Вы спасаете жизнь. Спасибо за содержательный комментарий, я вам очень признателен.
Не волнуйтесь. Учебное пособие по Java Swing обычно хорошее место для начала. Вы найдете информацию по всем основным темам, касающимся свинга, и все они включают в себя рабочие примеры для справки.




1) Вы никогда не добавляете свои компоненты, особенно
JMenuBarиJPanel, в вашJFrame. Единственное, что вы правильно добавили, так этоJLabelсо значком. Поэтому вам нужно будет добавить как минимумsetJMenuBar(mb)иadd(panel). 2) Нет необходимости вызыватьsetVisible(true)для каждого отдельного компонента. Добавьте все компоненты в вашJFrameи в конце вызовитеpack()иsetVisible(true)только на самом фрейме.