Java 弹出菜单显示后,按钮消失

Java 弹出菜单显示后,按钮消失,java,swing,popup,jbutton,popupmenu,Java,Swing,Popup,Jbutton,Popupmenu,我在弹出菜单的JButtons中添加了侦听器,但是当弹出菜单出现时,JButtons消失了,我需要将光标悬停在按钮上,使它们再次出现。为什么是这样 (这里的所有方法都在同一个类中) public Inventory(){ setLayout(空); 立根(0,0,175,210); initPopupMenu();//这只是设置弹出菜单中的内容 int x; //30个按钮 对于(x=0;x

我在弹出菜单的JButtons中添加了侦听器,但是当弹出菜单出现时,JButtons消失了,我需要将光标悬停在按钮上,使它们再次出现。为什么是这样

(这里的所有方法都在同一个类中)

public Inventory(){
setLayout(空);
立根(0,0,175,210);
initPopupMenu();//这只是设置弹出菜单中的内容
int x;
//30个按钮
对于(x=0;x<30;x++){
按钮[x]=新的JButton();
添加(按钮[x]);
按钮[x].addMouseListener(此);
}
x=0;
//这是一排按钮
对于(int i=0;i<5;i++)
对于(int j=0;j<6;j++){
按钮[x]。立根(i*35+1,j*35+1,33,33);
x++;
}
}
公共无效mouseClicked(MouseEvent e){
for(int j=0;j<30;j++)//我试过这个,但它还是不见了
按钮[j]。重新绘制();
对于(int i=0;i<30;i++){
如果(例如getSource()==按钮[i]){
System.out.println(“您按下按钮”+i);
show(e.getComponent(),e.getX(),e.getY());
}
}
}
这就是发生的事情,

停止使用
null
布局,似乎这可能是与此相关的问题之一。你的
JFrame
在我看来有点像
黑色
,这是你正在使用的
主题
还是一个新的
外观
,这也可能是造成这件事的原因。在这里检查一下,它在这里完美地使用了以下代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ButtonPopUp
{
    private static final int SIZE = 30;
    private JButton[] button = new JButton[SIZE];
    private JPopupMenu popup = new JPopupMenu("Hello World");

    private void createAndDisplayGUI()
    {
        JFrame frame = new JFrame("Button POP UP Example");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setLocationByPlatform(true);

        final JPanel contentPane = new JPanel();
        contentPane.setLayout(new GridLayout(0, 5));

        JMenuItem menuItem1 = new JMenuItem("Menu Item 1");
        JMenuItem menuItem2 = new JMenuItem("Menu Item 2");
        //popup.add(greetings);
        popup.insert(menuItem1, 0);
        popup.insert(menuItem2, 1);

        for (int i = 0; i < SIZE; i++)
        {
            button[i] = new JButton();
            button[i].setBorder(BorderFactory.createEtchedBorder());
            button[i].addMouseListener(new MouseAdapter()
            {
                public void mouseClicked(MouseEvent me)
                {
                    System.out.println("I am WORKING!!");
                    popup.show((JComponent)me.getSource(), me.getX(), me.getY());
                }
            });
            contentPane.add(button[i]);
        }

        frame.getContentPane().add(contentPane);
        frame.setSize(175, 250);
        frame.setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new ButtonPopUp().createAndDisplayGUI();
            }
        });
    }
}
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
公共类按钮PUP
{
私有静态最终整数大小=30;
私有JButton[]按钮=新JButton[SIZE];
private JPopupMenu popup=new JPopupMenu(“你好世界”);
私有void createAndDisplayGUI()
{
JFrame=newjframe(“按钮弹出示例”);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setLocationByPlatform(真);
final JPanel contentPane=new JPanel();
setLayout(新的GridLayout(0,5));
JMenuItem menuItem1=新的JMenuItem(“菜单项1”);
JMenuItem menuItem2=新的JMenuItem(“菜单项2”);
//添加(问候语);
弹出.插入(菜单项1,0);
弹出.插入(菜单项2,1);
对于(int i=0;i
以下是输出:


如果您发布了一些代码,其中包括如何创建按钮和菜单,这将非常有用。菜单是否隐藏了按钮,或者它们只是“消失”?“为什么是这样?”因为使用了代码。为了更快地获得更好的帮助,请发布一条。您可以添加一些代码,以便我们了解错误所在。@RahulBorkar“从您那里获得个人信息”这并不重要,但您已经有了。我经常看到你的答案,让我觉得“很好的答案,现在我不必去处理它了。+1”。)“这里的所有方法都在同一个类中”感谢您的编辑,但请注意,我仍然认为您更可能通过发布SSCCE而不是不可编译的代码片段来获得帮助。@Stephan:谢谢您并保持微笑:-),
LnF
可能是另一个罪魁祸首:(如果您对自定义单元格使用
JTable
,这将变得更漂亮、更具动态性;-)按钮后面的黑色网格只是因为使用了绘画方法。非常感谢!我将尝试使用此代码。@Marvin:试试这段最新代码,我已经为其添加了边框,为什么要使用
绘画(…)
方法,有什么具体原因吗,因为在
Swing
中,如果所说的
JComponent
有一个组件,就永远不要覆盖
paintComponent(…)
。非常欢迎您并保持微笑:-)好的,我会注意到这一点,但是为什么您永远都不要覆盖paintComponent?我只是想问一下。调用repaint()会调用paint()而不是paintComponent(),对吗?还是不?我只是Java的初学者。:)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ButtonPopUp
{
    private static final int SIZE = 30;
    private JButton[] button = new JButton[SIZE];
    private JPopupMenu popup = new JPopupMenu("Hello World");

    private void createAndDisplayGUI()
    {
        JFrame frame = new JFrame("Button POP UP Example");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setLocationByPlatform(true);

        final JPanel contentPane = new JPanel();
        contentPane.setLayout(new GridLayout(0, 5));

        JMenuItem menuItem1 = new JMenuItem("Menu Item 1");
        JMenuItem menuItem2 = new JMenuItem("Menu Item 2");
        //popup.add(greetings);
        popup.insert(menuItem1, 0);
        popup.insert(menuItem2, 1);

        for (int i = 0; i < SIZE; i++)
        {
            button[i] = new JButton();
            button[i].setBorder(BorderFactory.createEtchedBorder());
            button[i].addMouseListener(new MouseAdapter()
            {
                public void mouseClicked(MouseEvent me)
                {
                    System.out.println("I am WORKING!!");
                    popup.show((JComponent)me.getSource(), me.getX(), me.getY());
                }
            });
            contentPane.add(button[i]);
        }

        frame.getContentPane().add(contentPane);
        frame.setSize(175, 250);
        frame.setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new ButtonPopUp().createAndDisplayGUI();
            }
        });
    }
}