我需要一些帮助来添加一个menuBar到我的JFrame。我有我的GUI类:
public class Gui extends JFrame implements KeyListener {
private PanelMiniMap map;
private CardLayout cardLayout = new CardLayout();
private JPanel cards;
public Gui() {
this.setSize(1000, 800);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);// center
this.setResizable(false);
// bauen();
this.cards = new JPanel(cardLayout);
this.addListener();
this.add(cards);
this.setVisible(true);
}
public void addListener() {
this.addKeyListener(this);
}
public void addPanelZuCards(PanelSpielfeld spielfeld, PanelCharakterErschaffung charerschaffung, PanelMiniMap map) {
this.map = map;
this.cards.add(charerschaffung, "charerschaffung");
this.cards.add(spielfeld, "spielfeld");
}
public Dimension getDimension() {
return new Dimension(this.getWidth(), this.getHeight());
}
/**
* Neue Charaktererschaffung ausgeben
*
* @param charerschaffung
* Das Panel, auf dem die Oberflaeche zur Charaktererschaffung
* erstellt wird
*/
public void zeigeCharckterPanel() {
this.cardLayout.show(cards, "charerschaffung");
}
public void zeigeSpielPanel() {
this.cardLayout.show(cards, "spielfeld");
this.requestFocus();
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
map.move(-1, 0);
map.repaint();
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
map.move(1, 0);
map.repaint();
}
if (e.getKeyCode() == KeyEvent.VK_UP) {
map.move(0, -1);
map.repaint();
}
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
map.move(0, 1);
map.repaint();
}
}
}
在这里,我将我的2个JPanel(PanelSpielfeld,PanelCharakterErschaffung))添加到我的GUI中,它像这样锁定:
和另一张卡,这是相同的原则,我按下“开始!”按钮后显示另一张卡:
因此,如果我在Jframe中添加一个menuBar:
public Gui() {
this.setSize(1000, 800);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);// center
this.setResizable(false);
// bauen();
this.cards = new JPanel(cardLayout);
JMenuBar menuBar;
JMenu menu;
JMenuItem menuItem;
menuBar = new JMenuBar();
menu = new JMenu("A Menu");
menuItem = new JMenuItem("testitem");
menu.add(menuItem);
menuItem = new JMenuItem("3214dx");
menu.add(menuItem);
menuItem = new JMenuItem("dwq213m");
menu.add(menuItem);
menuBar.add(menu);
this.add(menuBar);
this.addListener();
this.add(cards);
this.setVisible(true);
this.addWindowFocusListener(this);
}
什么都没有发生,我真的不明白为什么。我做错了什么,或者我应该做什么,在两个“卡”上有相同的菜单栏?
**编辑:**我改了
this.add(menuBar)
致:
this.setJMenuBar(menuBar);
现在它像这样锁定:
我仍然缺少一些东西。我必须为JFrame设置一个特定的LayoutManager吗?
1条答案
按热度按时间oxf4rvwz1#
好吧,我很抱歉浪费了你的时间(谁读过这篇文章)。我的2个JPanles设置为框架首选的大小,所以问题是,菜单栏tock的空间,2面板需要,这是破坏我的图形用户界面。
如果我将2个JPanel的大小设置为frame.height -50,则它可以工作: