gpt4 book ai didi

java - Swing - 删除 JMenu 中除最后一个 JMenuItem 之外的所有内容

转载 作者:行者123 更新时间:2023-12-01 12:39:30 24 4
gpt4 key购买 nike

我试图在单击按钮时删除 JMenuItem 中的除最后一个之外的所有 JMenuItem,但尽管我在前几次单击中使其正常工作,但在连续尝试几次后它停止工作。

    int count = ojmenu.getMenuComponentCount();
for(int i = 0; i<count-1 ; i++)
{
ojmenu.remove(i);
}

最佳答案

您是否考虑过删除所有菜单项并重新添加最后一个菜单项,例如......

int count = menu.getMenuComponentCount();
Component last = menu.getMenuComponent(count - 1);
menu.removeAll();
menu.add(last);

您应该注意 JMenu 可能包含其他组件,因此使用 remove(int) 实际上可能不会删除菜单项,而是删除另一个组件...

Menus

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.LineBorder;
import org.jdesktop.jxlayer.JXLayer;
import org.pbjar.jxlayer.demo.TransformUtils;
import org.pbjar.jxlayer.plaf.ext.transform.DefaultTransformModel;

public class MenuExample {

public static void main(String[] args) {
new MenuExample();
}

public MenuExample() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}

final JMenu menu = new JMenu("Test");

JButton build = new JButton("Build");
build.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
makeItSo(menu);
}
});
JButton remove = new JButton("Remove");
remove.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int count = menu.getMenuComponentCount();
Component last = menu.getMenuComponent(count - 1);
menu.removeAll();
menu.add(last);
}
});

makeItSo(menu);

JPanel buttons = new JPanel();
buttons.add(build);
buttons.add(remove);

JMenuBar mb = new JMenuBar();
mb.add(menu);

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setJMenuBar(mb);
frame.add(buttons, BorderLayout.SOUTH);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

protected void makeItSo(JMenu menu) {
for (int index = 0; index < (Math.random() * 20); index++) {
menu.add("MenuItem " + index);
}
}
}

关于java - Swing - 删除 JMenu 中除最后一个 JMenuItem 之外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25253140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com