Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何防止JPOppMenu关闭?_Java_Swing - Fatal编程技术网

Java 如何防止JPOppMenu关闭?

Java 如何防止JPOppMenu关闭?,java,swing,Java,Swing,我创建了一个“日期选择器”组件,它只是一个控制器(JComponent)和一个显示器(jpopumenu扩展名)。我希望当用户用箭头控制日期时,显示弹出窗口仍然显示。我尝试调用popup.show(…)打开按钮的mousererelease,试图重置弹出窗口,但之后它不会像往常一样隐藏。如何在保持jpopmpmenu的常规行为的同时实现这一点 当然,我可以使用JWindow,但是我必须担心使用焦点等来模拟jpopmpmenu的显示/隐藏行为,这是我非常希望避免的 谢谢。:) SSCCEE im

我创建了一个“日期选择器”组件,它只是一个控制器(
JComponent
)和一个显示器(
jpopumenu
扩展名)。我希望当用户用箭头控制日期时,显示弹出窗口仍然显示。我尝试调用
popup.show(…)
打开按钮的
mousererelease
,试图重置弹出窗口,但之后它不会像往常一样隐藏。如何在保持
jpopmpmenu
的常规行为的同时实现这一点

当然,我可以使用
JWindow
,但是我必须担心使用焦点等来模拟
jpopmpmenu
的显示/隐藏行为,这是我非常希望避免的

谢谢。:)

SSCCEE

import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;

public class PopupSSCCE {

    private JFrame frame = new JFrame();
    private JPanel controller = new JPanel();
    private JLabel controllerLabel = new JLabel("Controller");
    private JLabel display = new JLabel("Display");
    private JPopupMenu popup = new JPopupMenu();
    private JButton prev = new JButton("<");
    private JButton next = new JButton(">");

    private PopupSSCCE() {
        controllerLabel.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseReleased(MouseEvent e) {
                if (controllerLabel.contains(e.getPoint()))
                    popup.show(controllerLabel, -50, controllerLabel.getHeight());
            }
        });

        frame.setPreferredSize(new Dimension(250, 300));
        popup.setPreferredSize(new Dimension(200, 200));
        controller.setPreferredSize(new Dimension(200, 50));
        prev.setPreferredSize(new Dimension(50, 50));
        next.setPreferredSize(new Dimension(50, 50));
        controllerLabel.setPreferredSize(new Dimension(100, 50));

        controller.add(prev);
        controller.add(controllerLabel);
        controller.add(next);
        popup.add(display);
        frame.getContentPane().add(controller);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new PopupSSCCE();
    }
}
导入java.awt.Dimension;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入javax.swing.*;
公共类弹出窗口{
私有JFrame=新JFrame();
私有JPanel控制器=新JPanel();
专用JLabel controllerLabel=新JLabel(“控制器”);
专用JLabel显示=新JLabel(“显示”);
private JPopupMenu popup=new JPopupMenu();
private JButton prev=新JButton(“”);
私有POPUPSCCE(){
controllerLabel.addMouseListener(新的MouseAdapter(){
@凌驾
公共无效MouseEvent(MouseEvent e){
if(controllerLabel.contains(e.getPoint()))
show(controllerLabel,-50,controllerLabel.getHeight());
}
});
frame.setPreferredSize(新尺寸(250300));
弹出.setPreferredSize(新维度(200200));
controller.setPreferredSize(新维度(200,50));
上一个设置PreferredSize(新尺寸(50,50));
setPreferredSize(新维度(50,50));
controllerLabel.setPreferredSize(新维度(100,50));
控制器。添加(上一个);
controller.add(controllerLabel);
控制器。添加(下一步);
弹出。添加(显示);
frame.getContentPane().add(控制器);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
公共静态void main(字符串[]args){
新的popupscce();
}
}
  • 不要使用
    JPopup
    Popup
    容器作为非作业代码的基础

  • Java4
    无法管理JComboBox、JMenu、jpopmpmenu、

  • 使用exist和non_bug代码by或made by

  • 重要的是,不要试图重新发明轮子


An比屏幕截图有用得多。@AndrewThompson肯定SSCCE会有用,但从应用程序中提取组件并不容易。当然,如果没有SSCCE,建议的方法可能足够简单。除非我可以首先在代码中测试它,否则我(通常)不会提出任何建议。特别是一些我以前从未尝试过的“有点与众不同”的东西。嘿,但这是你的问题&你的选择。用JWindow替换JPopup,添加,在
FocusLost
覆盖到
JWindow#setVisible()
,不要在没有可见JFrame的情况下实现鼠标双击(用户不友好),但如果有JPanel或任何JComponents,如果你不使用它,那么在使用un_修饰的JDialog时没有任何问题,顺便说一句,你是否通过Toedter加载了Calendar的源代码,有很多代码行用于Focus recycle