gpt4 book ai didi

java - 如何使菜单栏带在按钮之后消失?

转载 作者:行者123 更新时间:2023-12-01 21:12:05 25 4
gpt4 key购买 nike

如何使 JMenuBar 条纹在菜单项之后消失?我想在框架中间放置第二个菜单,这条条纹看起来很奇怪。

我尝试将背景设置为Panel.background,但它不起作用。

import java.awt.*;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.UIManager;

public class SwingMenuDemo extends JPanel {

public SwingMenuDemo(){
setLayout(null);

JMenuBar menuBar = new JMenuBar();
menuBar.setBackground(UIManager.getColor("Panel.background"));
menuBar.setBounds(0, 0, 450, 25);

add(menuBar);

JButton btn1 = new JButton("Menu1");
menuBar.add(btn1);

JButton btn2 = new JButton("Menu2");
menuBar.add(btn2);

JButton btn3 = new JButton("Menu3");
menuBar.add(btn3);
}

private static void createAndShowGUI() {
JFrame frame = new JFrame("SwingMenuDemo");

frame.setPreferredSize(new Dimension(400,400));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(),BoxLayout.PAGE_AXIS));
frame.getContentPane().add(new SwingMenuDemo());
frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}

}

enter image description here

最佳答案

如果您想创建自己的多个 JButton 的“菜单”,请不要使用 JMenu,也不要使用 null 布局和 setBounds(...) (作为一般规则,您应该避免后者)。相反,嵌套 JPanel,每个 JPanel 使用自己的布局管理器来允许简单地创建复杂的 GUI。

例如,您可以创建一个 JPanel 来保存按钮,比如名为 menuPanel,给它一个 new GridLayout(1, 0) 布局,这意味着它将在 1 行中保存一个组件网格,以及可变数量的列(这就是 0 的含义)。然后将按钮放入其中。

然后将该 JPanel 放入另一个使用 FlowLayout.LEADING, 0, 0) 作为布局的 JPanel - 它将把所有组件推到左侧。

然后让主 GUI 使用 BorderLayout 并将上述面板添加到其顶部的 BorderLayout.PAGE_START 位置。例如:

enter image description here

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.*;

@SuppressWarnings("serial")
public class SwingMenuDemo2 extends JPanel {
private static final String[] MENU_TEXTS = {"Menu 1", "Menu 2", "Menu 3"};
private static final int PREF_W = 400;
private static final int PREF_H = PREF_W;

public SwingMenuDemo2() {
JPanel menuPanel = new JPanel(new GridLayout(1, 0));
for (String menuText : MENU_TEXTS) {
menuPanel.add(new JButton(menuText));
}

JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEADING, 0, 0));
topPanel.add(menuPanel);

setLayout(new BorderLayout());
add(topPanel, BorderLayout.PAGE_START);
}

@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(PREF_W, PREF_H);
}

private static void createAndShowGui() {
SwingMenuDemo2 mainPanel = new SwingMenuDemo2();

JFrame frame = new JFrame("Swing Menu Demo 2");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}

关于java - 如何使菜单栏带在按钮之后消失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40961150/

25 4 0