Java JCombobox的圆形弹出窗口

Java JCombobox的圆形弹出窗口,java,swing,popup,jcombobox,rounded-corners,Java,Swing,Popup,Jcombobox,Rounded Corners,我使用nimbus作为L&F,但我真的很喜欢像L&F一样有一个圆形的组合框下拉列表。请参见以下图片 灵气 海鸥 我怎样才能达到这个效果呢?覆盖涂料在这里有用吗?方法是什么?可以通过更新UIManager属性来定制Nimbus: 画家也可以更新。例如,自定义滑块: 实际做法: sliderDefaults.put("Slider.thumbWidth", 20); sliderDefaults.put("Slider.thumbHeight", 20); sliderDefaults.put

我使用nimbus作为L&F,但我真的很喜欢像L&F一样有一个圆形的组合框下拉列表。请参见以下图片

灵气

海鸥


我怎样才能达到这个效果呢?覆盖涂料在这里有用吗?方法是什么?

可以通过更新UIManager属性来定制Nimbus:

画家也可以更新。例如,自定义滑块:

实际做法:

sliderDefaults.put("Slider.thumbWidth", 20);
sliderDefaults.put("Slider.thumbHeight", 20);
sliderDefaults.put("Slider:SliderThumb.backgroundPainter", new Painter() {
  public void paint(Graphics2D g, JComponent c, int w, int h) {
     g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
     g.setStroke(new BasicStroke(2f));
     g.setColor(Color.RED);
     g.fillOval(1, 1, w-3, h-3);
     g.setColor(Color.WHITE);
     g.drawOval(1, 1, w-3, h-3);
   }
});
资源:

  • 请参见此处的完整示例:
  • 此处列出了Nimbus默认设置:

不,覆盖绘制没有帮助,您需要提供一个能够提供所需支持的新UI委托。如果可以的话,我首先要看一下sea glass的源代码,看看您是否找到了它们是如何实现的-IMHO@MadProgrammer对我一开始就想看看他们在《海格拉斯》中做了什么。但没得到多少。我将检查UI委托。如果你也能告诉我一个好的来源,我将不胜感激。你可以从?@madah.下载它。。不,不是希格拉斯密码。我指的是使用JCombobox的UI委托的良好源代码/示例或教程。我想看看你是否知道。最好的开始是海镜组合框UI代表,这将给出一些想法,关于他们在何处/如何为你的伟大答案创建popupThanks,我真的很感谢你,我对社区完全失望,因为没有人在这里给出答案,现在,请给我解释一下如何在一种颜色的区域内画线,如果可以的话,请尝试一下,否则我决定给你奖金。耐心点,社区会给你惊喜的。问题太多,几乎没有空闲时间。无论如何,尽量不要使用任何形式的“勒索”。JTextArea是一个完全不同的问题。聪明点,使用搜索——已经有很多菜谱了,比如这不是勒索,只要看看我的额外请求写在赏金信息区,我不需要更改jComboBox或JSlider,我需要更改jTextArea和jTable,我对社区也有疑问,请积极,我只是想让你帮我解决这个问题,而呈现jTable和jTextarea的其他属性更容易。我刚刚给了你赏金,你现在能给我答案吗。我会尝试回答你的问题。谢谢
sliderDefaults.put("Slider.thumbWidth", 20);
sliderDefaults.put("Slider.thumbHeight", 20);
sliderDefaults.put("Slider:SliderThumb.backgroundPainter", new Painter() {
  public void paint(Graphics2D g, JComponent c, int w, int h) {
     g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
     g.setStroke(new BasicStroke(2f));
     g.setColor(Color.RED);
     g.fillOval(1, 1, w-3, h-3);
     g.setColor(Color.WHITE);
     g.drawOval(1, 1, w-3, h-3);
   }
});