- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在我的应用程序中使用 JCombobox 和 Nimbus LaF。我已经针对不同的状态覆盖了 Combobox 的 Backgroundpainter 和 ArrowButton 的 Foregroundpainter 。油漆工们工作得很好。但是当我增加字体大小时,Combobox 的箭头按钮会拉伸(stretch),看起来不太好。
如何使其不可拉伸(stretch)?
我使用了 Nimbus LaF 本身的画家,我必须提供自己的 PaintContext。
这是显示问题的代码。
public class ComboTest {
public ComboTest(){
String labels[] = { "A", "B", "C", "D" };
JFrame frame = new JFrame("ComboBox Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComboBox comboBox = new JComboBox(labels);
frame.add(comboBox, BorderLayout.NORTH);
frame.setSize(300, 100);
frame.setVisible(true);
}
public static void main(String[] args)
{
try {
UIManager.setLookAndFeel(NimbusLookAndFeel.class.getName());
}
catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
UIManager.getLookAndFeelDefaults().put("defaultFont", new Font("Segoe UI", Font.PLAIN,16));
// if i put the different font size than it is strecthing, with the size 12 it looks good.
//UIManager.getLookAndFeelDefaults().put("defaultFont", new Font("SegoeUI",Font.PLAIN,12));
UIManager.getLookAndFeelDefaults().put("ComboBox:\"ComboBox.arrowButton"[Pressed].foregroundPainter", new ComboArrowPainter(1));
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
new ComboTest();
}
});
}
}
这是 ArrowPainter 的类(class),它是我从 Nimbus 获取的
public class ComboArrowPainter extends AbstractRegionPainter {
static final int FOREGROUND_PRESSED = 1;
private int state; //refers to one of the static final ints above
private PaintContext ctx;
//the following 4 variables are reused during the painting code of the layers
private Path2D path = new Path2D.Float();
private Color color31 = decodeColor("textForeground", 0.0f, -0.6357143f, 0.45098037f, 0);
public ComboArrowPainter(int state) {
super();
this.state = state;
this.ctx = new PaintContext(new Insets(6,10,6,10), new Dimension(19,19), false);;
}
private Object[] componentColors;
@Override
protected void doPaint(Graphics2D g, JComponent c, int width, int height, Object[] extendedCacheKeys) {
//populate componentColors array with colors calculated in getExtendedCacheKeys call
componentColors = extendedCacheKeys;
paintForegroundPressed(g);
}
@Override
protected final PaintContext getPaintContext() {
return ctx;
}
private void paintForegroundPressed(Graphics2D g) {
path = decodePath8();
g.setPaint(color31);
g.fill(path);
}
private Path2D decodePath8() {
path.reset();
path.moveTo(decodeX(1.0242647f), decodeY(1.3526785f));
path.lineTo(decodeX(2.0f), decodeY(0.8333333f));
path.lineTo(decodeX(2.0f), decodeY(1.8571429f));
path.lineTo(decodeX(1.0242647f), decodeY(1.3526785f));
path.closePath();
return path;
}
}
最佳答案
幸运的是,我已经找到了解决办法。我已经计算了相对于字体大小的组件大小。我们已使用该值作为 Paintcontext。这是更新后的 Painter 类的构造函数,其余的将是相同的。
public ComboArrowPainter(int state, int FontSize) {
super();
this.state = state;
double value = FontSize*1.31031746;
int topBottomInsssetValue =(int) Math.ceil((value)/2);
this.ctx = new PaintContext(new Insets(6,topBottomInsssetValue,6,topBottomInsssetValue), new Dimension(19,19), false);
}
关于java - 组合框箭头按钮根据 nimbus LaF 中的字体大小进行拉伸(stretch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25743102/
我是 Java Nimbus 外观和感觉 的新手。我正在尝试使用 Nimbus 的功能来自定义单个组件实例,使用 putClientProperty("Nimbus.Overrides", overr
我正在使用 java 7 update 17 和 netBeans IDE 7.3 我想将 nimbus 设置为每个 GUI 项目的默认值,但 Oracle 网站指令不起作用。 how to set
我正在制作一个程序,该程序应该尽可能独立于平台。我正在使用 Nimbus LAF。 我想知道,我应该担心字体吗?它的默认字体是包含在 LAF 本身中还是从平台获取? 最佳答案 这是默认的非系统字体。
如何自定义 Nimbus 外观中组件的图像?我想在 Photoshop 中创建图像并放置在一些 Nimbus 外观和感觉组件上,这些是我想要更改的组件: 滚动条按钮旋钮滚动条拇指滚动条滚动条轨道 谢谢
在 Nimbus 的网络照片应用程序示例中,当我返回表格(从 Facebook 或 Dribbble 中选择要下载照片的位置)时,我之前看到的和缓存中的照片都会从其中清除。有办法防止这种情况吗? 例如
我想更改选项卡标题的颜色。 我尝试设置不同的属性,但没有任何变化。 在我的 main 中,我将属性 text 设置为白色,因此所有文本都是白色的。 现在我想更改一些组件文本,例如选项卡 Pane ,但
我已经创建了一个文本字段组件,里面有一个“x”按钮,可以清除该字段的文本。它在使用 Window 的系统外观和感觉(对于 Windows)时效果很好,但是我在使用 Nimbus 时尝试获得正确的外观时
引用这个错误: 4848910 : UIManager only updates colors once 我的 JFrame 上有两个按钮。从第一个按钮开始,我将 LAF 颜色更改为 UIManage
所以,我的程序中有一个使用 Nimbus LAF 的 JTextArea。由于一些功能问题,我需要将其替换为 JTextPane。 但是,JTextArea 默认情况下有一个绘制的边框。 JTextP
我正在使用 NIPagingScrollView在 iPhone 上显示多个页面。 每次我翻到一个页面,下一页也被预先加载,这很好。 当我旋转 iPhone从纵向模式到横向模式,我让layoutSub
我正在使用 Nimbus显示带有擦洗器和可缩放 ImageView 的相册。我使用网络图像,并在加载最终图像之前显示缩略图。 NIPhotoAlbumScrollView提供方法didLoadPhot
我正在尝试覆盖 JLabel 的一些 nimbus 属性。 UIDefaults labelDefault = new UIDefaults(); labelDefault.put("Labe
刚接触java,有一个问题,无论我做什么似乎都无法解决,所以任何我们将非常感谢您的帮助。 我有一个Java小应用程序,并集成了一个弹出日历(WWW)使用 Nimbus 外观和感觉的可用。我的问题是我无
我正在尝试全局更改工具提示的大小。 我正在使用: UIManager.put("ToolTip.font", new Font("SansSerif",Font.PLAIN,25)); 总体来说效果很
我们正在使用 Nimbus LaF 开发一个 Swing 应用程序。我们更改了许多 Nimbus 默认设置(控件、文本、NimbusLightBackground 等)以拥有深色主题。 现在我们在渲染
我想验证表格单元格中的用户输入,并且我使用了 Nimbus 外观。这是验证整数输入的单元格编辑器的代码:WholeNumberField它扩展了 JTextField 并添加了输入验证。 当我为列设置
我想知道为什么 Nimbus会以某种方式与 Virtual keys 发生冲突.查看我在下面制作的示例: public class buttontest implements ActionLi
只是寻找一些文档。 最佳答案 Nimbus 基于 Synth,因此您应该从 Synth 的角度考虑对其进行自定义,这一点已有详细记录。 关于java - 有人有关于 Nimbus 外观和感觉定制的信息
我想更改选项卡选项卡的高度,为此我尝试了多种方法,但没有成功。首先,我尝试使用间隔图标,高度很好,但选项卡的文本不再居中。然后我尝试更改 Nimbus L&F 属性,TabbedPane.tabIns
我有例如 UIDefaults defaults = UIManager.getLookAndFeelDefaults(); defaults.put("text",Color.GREEN);` 文本
我是一名优秀的程序员,十分优秀!