有没有办法在Swing GTK LaF中更改默认字体大小?
GTK LaF似乎假定为72dpi,因此所有字体只有使用96dpi屏幕时应该是的大小的3/4.有关详细信息,请参阅此Fedora错误.我想在此期间找到一个解决方法,同时我等待修复.
我已经尝试过重置字体大小UIDefaults,例如,这里推荐的,但是(如前所述)GTK LaF似乎忽略了这一点.
我可以构建一个小部件工厂,它也可以设置所需的字体大小来创建我的所有Swing小部件,但这将是大规模侵入性的,所以如果有任何其他方式,我想避免使用该路径.
编辑:以下不起作用:
public class GTKLaF extends com.sun.java.swing.plaf.gtk.GTKLookAndFeel {
@Override
public UIDefaults getDefaults() {
final float scale = 3f;
final UIDefaults defaults = super.getDefaults();
final Map<Object,Object> changes = new HashMap<Object,Object>();
for (Map.Entry<Object,Object> e : defaults.entrySet()) {
final Object key = e.getKey();
final Object val = e.getValue();
if (val instanceof FontUIResource) {
final FontUIResource ores = (FontUIResource) val;
final FontUIResource nres =
new FontUIResource(ores.deriveFont(ores.getSize2D()*scale));
changes.put(key, nres); …Run Code Online (Sandbox Code Playgroud) 我需要自定义RCP应用程序的外观.
我看了一下Eclipse Presentation API,我想它允许自定义工作台中除控件之外的所有东西.
那么有任何自定义控件的解决方案吗?
我做了一些研究工作,并使用控制画布绘制实现了一些特殊的SWT cunstomization.可能有更好的解决方案吗?
在Swing中,您可以使用Synth主题.如果SWT存在一些"皮肤"框架,那就太好了.
只是想知道,我通过以下方式定制了UIBarButtonItems
+ (UIBarButtonItem *)createBarButtonItemWithTitle:(NSString *)t target:(id)tgt action:(SEL)a
{
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *buttonImage = [[UIImage imageNamed:@"blabla.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10)];
CGRect buttonFrame = [button frame];
buttonFrame.size.width = 35;
buttonFrame.size.height = buttonImage.size.height;
[button setFrame:buttonFrame];
[button setBackgroundImage:buttonImage forState:UIControlStateNormal];
[button addTarget:tgt action:a forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
return buttonItem ;
}
Run Code Online (Sandbox Code Playgroud)
但是现在,我没有按钮背景图像上的阴影/光泽效果....
有没有办法让它自动完成,或者我必须以编程方式完成它?
编辑:

由于在默认的LookAndFeel中字体大小太小,我使用几行代码将其设置为Nimbus,而我的JOptionPane显示具有不同大小的Yes和No按钮. 是仍然非常小,而" 否"设置为我指定的大小.有谁知道为什么或如何解决它?
public static void setUIFont(Font a){
FontUIResource ax=new FontUIResource(a);
javax.swing.UIManager.put("OptionPane.messageFont", ax);
javax.swing.UIManager.put("OptionPane.buttonFont", ax);
javax.swing.UIManager.put("OptionPane.Font", ax);
javax.swing.UIManager.put("InternalFrame.titleFont", ax);
javax.swing.UIManager.put("TextField.font", ax);
javax.swing.UIManager.put("ComboBox.font", ax);
}
Run Code Online (Sandbox Code Playgroud)
...
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
class UseNimBus extends SwingInvoker{
public void run(){
JDialog.setDefaultLookAndFeelDecorated(true);
setUIFont(new FontUIResource(new Font(ufont, Font.PLAIN, 20)));
}
}
(new UseNimBus()).execute();// just invokeLater()
Run Code Online (Sandbox Code Playgroud)
以下行显示选项窗格,但它具有" 是"和" 否",具有不同的大小.这是正常还是只是我的问题?
inputValuex=JOptionPane.showConfirmDialog(
myWin, "Are you exiting?", "You clicked X", JOptionPane.YES_NO_OPTION);
Run Code Online (Sandbox Code Playgroud)
还是行不通.我试过使用代码
javax.swing.UIManager.put("OptionPane.isYesLast", true);
更改是按钮的位置,但它没有任何效果.我只是想看看如何设置这些值,如布尔值.
另外,我甚至列出了UIManager.getDefaults() …
我有一个JFrame,我正在放几个JButton.一半的JButton有颜色编码 - 即我在X事件发生时将它们变成蓝色 - 我使用btn.setBackgroundColor(Color).当我使用setBackgroundColor时,我可以看到我看起来正常的JButton具有着色/着色/具有setBackgroundColor的那些没有.我已经尝试使颜色在有限的程度上透明,但我仍然得到一个平坦的颜色块,而不是有色版本的阴影按钮.
这似乎应该是一个很容易修复的东西,但它现在正在困扰我.我不想改变默认的LAF - 没关系.我不想放弃变色.我确实希望按钮都显示为样式(我用于HTML的单词).
所以我在这里错过了什么....它是什么?
编辑添加:
JFrame frame = new JFrame();
frame.add(new JButton("42"));
JButton btn24 = new JButton("24");
btn24.setBackground(Color.red);
frame.add(btn24);
frame.setVisible(true);
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,"42"将在我的Windows机器上显示底部和顶部的轻微颜色变化,从而创建圆形和阴影效果."24"按钮将显示红色方块.我的问题是:有没有办法让"24"显示圆形/阴影/样式与顶部的红色色调?或者我是否需要简单地将所有按钮制成扁平方块以获得统一的外观?
谢谢!
这是我之前的问题的延续,但它解决了一个对其他人有用的特定问题,所以我想我会把它作为一个单独的问题发布.
我已经成功创建了一个JTabbedPane,但是有一个蓝色边框突出显示,显示我要删除的选项卡:

为了澄清我的意思,这里是一张JTabbedPane的图片,没有Eclipse的蓝色边框高亮:

我试过的东西已经被注释掉了:
public class SeaGlassExercise {
public static void initWindow() {
JFrame frame = new JFrame("Application Name");
CustomTabbedPane content = new CustomTabbedPane();
frame.setContentPane(content);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setLocationByPlatform(true);
// try {
// UIManager.setLookAndFeel(
// UIManager.getSystemLookAndFeelClassName());
// } catch (Exception e) {
// e.printStackTrace();
// }
// SwingUtilities.updateComponentTreeUI(frame);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
initWindow();
}
});
}
}
class CustomTabbedPane extends JPanel {
public CustomTabbedPane() {
super(new GridLayout(1, …Run Code Online (Sandbox Code Playgroud) 正如标题中所述,我真的很难找到这个问题的好答案.我目前正在开发一个只有桌面的应用程序,没有CSS或任何互联网部分.我希望它看起来像Windows 8的地铁外观.我不是在谈论布局而是外观和感觉.我特别喜欢方形而不是圆形的按钮,但所有其他扁平方形的外观和感觉.以下链接与我正在寻找的相反,作为参考.
这个阅读至少更接近于关于原生外观和java的讨论.然而,它实际上没有给出任何具体的方法来获得例如方形平面按钮:
目前我正在使用Eclipse,但我不会坚持使用它,但它最简单.我一直在研究JavaFx,但它似乎没有方形按钮或地铁的感觉,从我读过的东西,但也许我错过了一些东西.任何人都能指出我如何使外观和感觉变得简单吗?
我花了最后几个小时试图解决这个问题,但没有成功.
我最近改为黑暗主题,但我在阅读工具提示/提示/ sugestions/overlay窗口时遇到问题(不知道该怎么称呼它,因为我已经看到人们调用所有这些不同的名字),以更易读的格式无需点击它就能阅读它.
已经尝试过切换windows工具提示颜色,如其他帖子所示,但没有成功.我正在使用Windows 7.
从下面的屏幕截图中可以看出,当显示工具提示/提示/ sugestions/overlay窗口时,它是非常难以理解的,并且必须单击它以使其可读是非常烦人的.
关于如何更改未聚焦的背景颜色或所有文本颜色的方法?
没有焦点

有焦点

我正在将我的Swing应用程序迁移到Java 11以利用HiDPI显示支持.我正在使用三星显示器,分辨率设置为3840x2160,缩放率为125%,使用Windows 10.
虽然java 9及以上版本被宣传为正确处理HiDPI缩放,但在显示简单的JTable时,网格线显示不同的厚度,如下所示:
这是以下代码:
import javax.swing.*;
public class TestTable {
public static void main(String[] args) {
new TestTable();
}
public TestTable() {
JTable table = new JTable(12,6);
JDialog dialog = new JDialog();
JScrollPane sp = new JScrollPane(table);
table.setShowGrid(true);
table.setRowHeight(25);
dialog.setContentPane(sp);
dialog.setSize(300,300);
dialog.setVisible(true);
dialog.setLocationRelativeTo(null);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在设置Nimbus L&F时,问题就会消失:
import javax.swing.*;
public class TestTable {
public static void main(String[] args) {
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (Exception e) …Run Code Online (Sandbox Code Playgroud) look-and-feel ×10
java ×7
swing ×4
nimbus ×2
c++ ×1
eclipse ×1
eclipse-rcp ×1
font-size ×1
gtk ×1
hidpi ×1
ios ×1
jbutton ×1
joptionpane ×1
jtabbedpane ×1
qt ×1
swt ×1
themes ×1
windows-8 ×1