JPopupMenu有一组非常具体的操作要求,是的,它们确实会在外观和感觉之间发生变化.

您可以做的是使用未经修饰的JFrame创建自己的弹出窗口.这里的技巧是模仿所需的弹出窗口,例如,当另一个组件获得焦点时自动关闭,使用转义键消除弹出窗口的功能…等等…

这只是提供概念验证的简单示例,我个人还为转义键添加了键绑定,某种侦听器界面,以允许搜索窗格请求关闭弹出窗口以及自动聚焦的功能窗口可见时的某些组件,但是那只是我…

import java.awt.BorderLayout;

import java.awt.EventQueue;

import java.awt.GridBagLayout;

import java.awt.Point;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowEvent;

import java.awt.event.WindowFocusListener;

import javax.swing.JButton;

import javax.swing.JComponent;

import javax.swing.JFrame;

import javax.swing.JList;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextField;

import javax.swing.SwingUtilities;

import javax.swing.UIManager;

import javax.swing.UnsupportedLookAndFeelException;

public class TestPopup {

public static void main(String[] args) {

new TestPopup();

}

public TestPopup() {

EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

try {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {

ex.printStackTrace();

}

JFrame frame = new JFrame("Testing");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.add(new TestPane());

frame.pack();

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

});

}

public class TestPane extends JPanel {

private JButton show;

public TestPane() {

setLayout(new GridBagLayout());

show = new JButton("...");

show.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

PopupWindow window = new PopupWindow();

window.show(show, 0, show.getHeight());

}

});

add(show);

}

}

public class SearchPane extends JPanel {

private JList list;

private JTextField search;

public SearchPane() {

setLayout(new BorderLayout());

list = new JList();

list.setPrototypeCellValue("This is just a test");

list.setVisibleRowCount(20);

search = new JTextField(10);

add(new JScrollPane(list));

add(search, BorderLayout.SOUTH);

}

}

public class PopupWindow extends JFrame {

private SearchPane searchPane;

public PopupWindow() {

setUndecorated(true);

setDefaultCloseOperation(DISPOSE_ON_CLOSE);

addWindowFocusListener(new WindowFocusListener() {

@Override

public void windowGainedFocus(WindowEvent e) {

}

@Override

public void windowLostFocus(WindowEvent e) {

dispose();

}

});

searchPane = new SearchPane();

add(searchPane);

pack();

}

public void show(JComponent parent, int x, int y) {

Point point = new Point(x, y);

SwingUtilities.convertPointToScreen(point, parent);

setLocation(point);

setVisible(true);

}

}

}

java的lookAndfeel_java-LookAndFeel行为之间的区别相关推荐

  1. 计算机vb和vf编程有什么区别,C、c++、Java、VB和VF之间的区别.doc

    C.c.Java.VB和VF之间的区别 葛车续士煤擅绒佛椿署桂卡楚感徐虑棠送彤视显峦托伏净陌钥忻拢殿坍绵卸煞帚袋痊侧况局蟹涤患闷瓶般梆休碴市寅稗对齐寒滓手拔苞垦谈塑似骤既融吼甜肝炬豌等臼笔牙瑟凯馅号珠 ...

  2. Java中Comparator和Comparable之间的区别

    常见的面试问题之一是"比较器和可比较器之间有什么区别". 或"您将如何通过其ID或名称对员工对象集合进行排序".为此,我们可以使用两个接口,即Comparato ...

  3. Java中抽象类和接口之间的区别

    一些受欢迎的访谈问题是"抽象类和接口之间有什么区别","什么时候使用抽象类以及什么时候使用接口". 因此,在本文中,我们将讨论这个主题. 在探讨它们之间的差异之 ...

  4. Java中浅拷贝与深拷贝之间的区别

    在深入探讨Java中浅表副本与深表副本之间的差异之前,让我们看看首先进行克隆的是什么. 什么是克隆? 克隆是在内存中创建现有对象的精确副本的过程.在Java中,java.lang.Object类的cl ...

  5. java c# 线程,DART隔离和线程(Java,C#)之间的区别

    For me The DART Isolate looks like a Thread (Java/C#) with a different terminology. In which aspect ...

  6. Java中float与double之间的区别?

    文章目录 float类型与double类型的区别 测试用例 Ending~! 提示:以下是本篇文章正文内容,下面案例可供参考 float类型与double类型的区别 float表示单精度浮点型,占用4 ...

  7. Java中WeakReference,SoftReference,PhantomReference和Strong Reference之间的区别

    很长一段时间以来,WeakReference和SoftReference都已添加到Java API中,但是并不是每个Java程序员都熟悉它. 这意味着在Java中使用WeakReference和Sof ...

  8. weakreference_Java中WeakReference,SoftReference,PhantomReference和Strong Reference之间的区别...

    weakreference 很长一段时间以来,WeakReference和SoftReference都已添加到Java API中,但是并不是每个Java程序员都熟悉它. 这意味着在Java中使用Wea ...

  9. JDK,JRE和JVM之间的区别

    Table of Contents JAVA开发套件 JAVA运行时环境 JAVA虚拟机 JDK,JRE和JVM之间的差异 JRE和JDK如何工作? JRE如何工作? JVM如何工作? 推荐文章: J ...

  10. java中separator_java - File.separator和路径中的斜杠之间的区别

    java - File.separator和路径中的斜杠之间的区别 在Java Path-String中使用/和普通的File.separator有什么区别? 与双反斜杠相比,/平台独立似乎不是原因, ...

最新文章

  1. 赛森机器人_戴森扫地机器人体验:六千元的它,到底好在哪?
  2. 【运营】“顶级运营”最强速成攻略!目前国内不超过200人!
  3. 去除inline-block元素间间距
  4. linux一款不错的linux系统清理工具
  5. mysql8.0 linux 安装
  6. Docker配置国内加速器加速镜像下载的方法
  7. unity3d TextMeshPro使用中文字体(秒懂)
  8. SQLServer 查询建表语句
  9. 推荐基于.NetCore一款高性能敏感词检测开源库
  10. 解决Jenkins一直用户名或密码错误
  11. 华数机器人旋转编程_华数机器人HRT-6-Ⅰ型示教器操作与编程.ppt
  12. npm WARN read-shrinkwrap This version of npm is compatible...报错解决
  13. JVM safe point 安全点和 counted loop 可数循环
  14. html个人新闻网站,html,js,css实现
  15. 使用cdrecord命令刻录光盘
  16. 双网卡同网段静态路由_WINDOWS系统下双网卡设置路由 本文主要涉及到静态路由...
  17. WIN7安装npm的问题
  18. 全球与中国冷凝器扩管器市场深度研究分析报告
  19. 100个python算法超详细讲解:猜牌术
  20. 时间序列分析——如何正确使用单位根检验(ADF)?

热门文章

  1. TypeScript 编译生成的 JavaScript 源代码里的 ɵcmp 属性
  2. TypeScript里get属性的实现
  3. SAP Spartacus internationalization(i18n) 的实现 - 关于多语言,翻译支持的实现
  4. rxjs里的Observable对象subscribe方法的执行原理
  5. SAP BOPF和Spring框架里加了注解的控制器是如何被调用的
  6. 另一种使用SAP SAT事务码对通过浏览器启动的应用的性能测量和分析方式
  7. InvisionApp学习
  8. SAP Fiori ButtonRenderer
  9. 关于Fiori MyAccount无法在standalone环境下运行的问题
  10. SAP Word template出了错误后的调试办法