标签: look-and-feel

Java:必须在EDT线程中初始化GUI?

我是杰森.我对Substance的外观有一点问题(https://substance.dev.java.net/).

我的问题更为笼统.我已经编写了GUI并且工作正常,但是当我使用Substance Look-and-feel时,它需要在EDT线程(事件调度线程或其他东西)中进行所有GUI初始化.

现在我正在使用com.sun.java.swing.plaf.windows.WindowsLookAndFeel(不确定我是否拼写正确)并且它不需要任何此类内容.

所以我通过调用SwingUtilities.invokeLater()将主要初始化放入EDT.这使它工作.但是,该程序在执行期间还会生成其他几个窗口.现在我的代码如下:

SomeNewWindow window = new SomeNewWindow();
// ... some bs emitted
window.doStuff();
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常,因为在调用window.doStuff()时,它已经初始化了.但是Substance要求我做这样的事情:

SwingUtilities.invokeLater(new Runnable(){
public void run(){
SomeNewWindow window = new SomeNewWindow();
}});
// ... bs emitted
window.doStuff();
Run Code Online (Sandbox Code Playgroud)

这里它有时会抛出NullPointerException,因为窗口没有被时间窗口初始化.调用了doStuff().我不能将window.doStuff()放入EDT线程,因为它通常需要几秒钟才能返回并挂起GUI.

我在调用EDT线程后尝试放入Thread.sleep(1000),因为它可能已经初始化了.但这似乎很尴尬.我只需要一种方法让主线程在SomeNewWindow初始化返回时"知道",这样它就可以继续而不必担心NullPointerException.

提前致谢.

java user-interface swing multithreading look-and-feel

2
推荐指数
1
解决办法
3582
查看次数

我设置了哪些外观和感觉组件来更改TitledBorder的文本颜色?

我的Swing应用程序中有一组单选按钮,它们周围有一个边框,如下所示:

radioButtonPanel.setBorder( new CompoundBorder ( 
    BorderFactory.createTitledBorder( " Input Data " ), padBorder ) );
Run Code Online (Sandbox Code Playgroud)

我们的应用程序支持两种外观和感觉,一种浅色和深色.在两者之间切换时,边框颜色本身似乎正确地改变颜色,但文本没有.对于我的生活,我无法弄清楚组件的名称是什么,我应该设置颜色.该文档createTitledBorder()说它使用默认的外观,但我不确定它在哪里拉它的默认值.我以为是Panel.foreground,但那不是它,似乎没有别的东西看起来很正确.

有谁知道我需要在这里设置哪些外观和感觉组件?

java swing look-and-feel

2
推荐指数
1
解决办法
944
查看次数

我什么时候应该为Java Swing编写自己的外观而不是自定义?

我为Java Swing使用了一些不同的外观和感觉,但我不喜欢100%的任何人,所以我经常最终定制它.有时候我在考虑编写自己的LaF是否更好(通过扩展现有的LaF),但我真的不知道.

目前,我主要使用Nimbus,但我改变了所有颜色(更暗),并重写了一些组件的外观,如滑块和滚动条.我也主要定制所有表格,我正在考虑改变其他一些组件的外观.

什么时候建议创建一个新的外观而不是自定义一个?优缺点都有什么?

即通过扩展Nimbus来定制Nimbus或创建一个新的?

相关文章:创建自定义外观(旧)

java swing look-and-feel

2
推荐指数
1
解决办法
3108
查看次数

JTable列标题居中时的外观问题

我使用以下代码:

public final class TableCellRendererCenter extends DefaultTableCellRenderer {

    public static final TableCellRenderer INSTANCE
            = new TableCellRendererCenter();

    protected TableCellRendererCenter() {

        // Calling super
        super();

        this.setHorizontalAlignment(SwingConstants.CENTER);

    }

}
Run Code Online (Sandbox Code Playgroud)

在JTable列上:

    TableColumnModel retrMod = ChartItemsTable.getColumnModel();
    TableColumn retrCol = retrMod.getColumn(2);

    retrCol.setHeaderRenderer(TableCellRendererCenter.INSTANCE);
    retrCol.setCellRenderer(TableCellRendererCenter.INSTANCE);
Run Code Online (Sandbox Code Playgroud)

并且外观与其他列标题不再匹配:

在此输入图像描述

为什么?我该如何解决这个问题?

编辑

似乎NetBeans正在使用DefaultTableCellHeaderRenderer它来自package sun.swing.table;

我到处读到我不应该使用太阳包.Grrrr ......这没有用!

编辑2

0verbose的建议产生以下结果:

在此输入图像描述

根据eugener的建议,我更新了我的代码如下:

public final class TableCellRendererCenter extends DefaultTableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(
            JTable table, Object value, boolean isSelected,
            boolean hasFocus, int row, int column) {

        // returns component used for …
Run Code Online (Sandbox Code Playgroud)

java swing look-and-feel jtableheader

2
推荐指数
1
解决办法
2441
查看次数

JFrame上的"关闭/最小化"按钮的自定义设计

我想应用我自己的关闭和最小化按钮.有没有办法改变JFrame设计?

java swing jframe look-and-feel windowlistener

2
推荐指数
1
解决办法
7778
查看次数

如何设计具有现代外观的桌面应用程序?

我想创建具有现代外观的平台独立桌面应用程序(Simmilar到github桌面应用程序).是否有可能设计具有github桌面应用程序使用java提供的外观和感觉的桌面应用程序?

请先参阅github windows应用程序以供参考.因为我已经知道了java中的awt和swing,但我认为我们不能用awt或swing创建相同的外观和感觉.

提前致谢.

java user-interface swing desktop-application look-and-feel

2
推荐指数
1
解决办法
2315
查看次数

自定义按钮不能在mac上工作(ButtonUI)

我有一个应用程序,它使用遍布文本和图标的自定义按钮.适用于Windows和Linux,但现在OSX用户抱怨.文本不会显示在Mac上,只是'...'.代码看起来很简单,但是当涉及到mac时我很无能为力.我怎样才能解决这个问题?

测试用例:

package example.swingx;
import example.utils.ResourceLoader;
import com.xduke.xlayouts.XTableLayout;    
import javax.swing.*;
import javax.swing.plaf.ComponentUI;
import java.awt.*;
import java.awt.event.ActionEvent;

public class SmallButton extends JButton {
    private static ComponentUI ui = new SmallButtonUI();
    public SmallButton() {
        super();
        /*  final RepaintManager repaintManager = RepaintManager.currentManager(this);
        repaintManager.setDoubleBufferingEnabled(false);
        setDebugGraphicsOptions(DebugGraphics.FLASH_OPTION);*/
    }
    public SmallButton(AbstractAction action) {
        super(action);
    }
    public SmallButton(String text) {
        super(text);
    }
    public SmallButton(Icon icon) {
        super(icon);
    }
    public void updateUI() {
        setUI(ui);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final JPanel …
Run Code Online (Sandbox Code Playgroud)

java macos swing look-and-feel jbutton

2
推荐指数
1
解决办法
3606
查看次数

为什么我的GUI看起来不对劲?

使用Java中的Mac上的Netbeans GUI构建器构建.

这就是Netbeans中GUI的样子:

Netbeans GUI

当我点击预览时,它看起来并不太糟糕,但有一些小变化:

GUI预览

最后,当我运行它时,它看起来像这样: - 太可怕了

外观和感觉

我认为这与Java的"外观和感觉"有关.我试过删除它,GUI变得一团糟.那么我的选择是什么?正如你可以看到Netbeans中的所有内容一样,当我运行它时,一切都很糟糕.

有任何想法吗?花了一天时间搞乱了这一点,我至少可以说

java user-interface netbeans look-and-feel

2
推荐指数
2
解决办法
2295
查看次数

如何在运行时改变swing应用程序的外观和感觉?

我知道有一种SwingUtilities.updateComponentTreeUI(Component c)方法,但它不能很好地工作.例如,我有一个JFileChooser当前的外观和感觉是Windows,然后我将外观改为Nimbus SwingUtilities.updateComponentTreeUI(mainWindow),并且主窗口的样式已正确更改,但是当我用该JFileChooser.showOpenDialog(Component parent)方法显示文件选择器时,它仍然在Windows中外观和感觉.如果我使用该JPopupMenu.show(Component invoker, int x, int y)方法显示弹出对话框,也会发生同样的情况.解决这个问题的任何方法?

java user-interface swing look-and-feel

2
推荐指数
2
解决办法
2947
查看次数

在Nimbus LaF中更改JButton的默认键值

我的程序中有两个按钮

JButton button1 = new JButton();
button1.setText("First Button");
JButton button2 = new JButton("Second Button");
Run Code Online (Sandbox Code Playgroud)

我试图更改按钮的LaF,我可以使用以下代码更改按钮背景颜色

UIManager.put(Button.background new color(134,201,236));
Run Code Online (Sandbox Code Playgroud)

但是当我试图更改其他键值时"Button.disabled","Button[Default+Focused+Pressed].backgroundPainter"代码对我来说不起作用.有人可以帮我如何更改使用Painter的默认键值吗?

java swing look-and-feel jbutton nimbus

2
推荐指数
1
解决办法
1336
查看次数