Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Windows中更改org.eclipse.swt.widgets背景色_Java_User Interface_Colors_Swt - Fatal编程技术网

Java 在Windows中更改org.eclipse.swt.widgets背景色

Java 在Windows中更改org.eclipse.swt.widgets背景色,java,user-interface,colors,swt,Java,User Interface,Colors,Swt,现在,我正试图用以下代码更改org.eclipse.swt.widgets.Button的背景色: Button sceneButton = new Button(border, SWT.TOGGLE | SWT.FLAT); sceneButton.setBackground(Color.RED); 按钮场景按钮=新按钮(边框,SWT.TOGGLE | SWT.FLAT); 背景按钮。背景(颜色。红色); 当我在Solaris中运行该程序时,它可以正常工作,但当我在Windows中

现在,我正试图用以下代码更改org.eclipse.swt.widgets.Button的背景色:

Button sceneButton = new Button(border, SWT.TOGGLE | SWT.FLAT); sceneButton.setBackground(Color.RED); 按钮场景按钮=新按钮(边框,SWT.TOGGLE | SWT.FLAT); 背景按钮。背景(颜色。红色);
当我在Solaris中运行该程序时,它可以正常工作,但当我在Windows中运行该代码时,它却不起任何作用。这可能吗?如果没有,是否有某种解决方法允许我在按钮中显示文本的同时更改背景颜色(即使“颜色”是图像)?谢谢

你不能。方法文件中提到:


例如,在Windows上,按钮的背景无法更改。

Windows中按钮的背景是从SWT外部设置的

右键单击桌面,单击属性

转到“外观”选项卡

单击“高级”

我相信“3D对象”决定了按钮的背景。这取决于每个用户的主题


SWT的一个优点是它使用了底层的系统小部件和主题。SWT令人沮丧的一点是它使用了底层的系统小部件和主题。

在windows操作系统上的
按钮。setBackGround
不能直接工作。一小段代码可能会有所帮助。覆盖按钮的绘制事件,如下所示:-

-----obj是下面代码段中的按钮名称------------


可以使用CLabel模拟按钮。添加鼠标侦听器以更改鼠标下移和鼠标上移时的背景,并在“鼠标上移”事件中分派一个选择侦听器事件,使其行为与按钮相同。例如:

Color bg = ...
Color shadow = ...
CLabel simulatedButton = new CLabel(parent, SWT.PUSH);
simulatedButton.setBackground(bg); 
simulatedButton.addMouseListener(new MouseAdapter() {

  @Override
  public void mouseUp(MouseEvent e) {
    simulatedButton.setBackground(bg);
    notifyListeners(SWT.Selection, new Event());
  }

  @Override
  public void mouseDown(MouseEvent e) {
    simulatedButton.setBackground(shadow);
  }
});

当您按下鼠标以获得单击按钮的效果时,这会短暂更改按钮的背景。与其他SWT小部件不同,CLabel也可以进行扩展,因此如果需要经常这样做,可以创建一个子类

否您不能更改SWT按钮的背景。您可以在EclipseSWT文档中找到此信息

将接收器的背景色设置为参数指定的颜色,如果参数为null,则设置为控件的默认系统颜色


注意:此操作是一个提示,可能会被平台覆盖。例如,在Windows上,按钮的背景无法更改。

可能是Windows SWT中的最后一次更改改变了这一点吗?我在代码中留下了红色背景,我将SWT库更改为最新版本,现在背景颜色正在更改

btnNewButton.setBackground(SWTResourceManager.getColor(SWT.COLOR_BLUE));
您可以使用上述代码在SWT for windows中更改按钮的背景色。 应满足以下几个先决条件:

  • 使用这两个SWT jar:org.eclipse.SWT.win32.win32.x86_64_3.109.0.v20181204-1801.jar和org.eclipse.SWT_3.109.0.v20181204-1801.jar。(109版)
  • 导入org.eclipse.wb.swt.SWTResourceManager 您也可以尝试最新版本的JAR,但它对我很有用。 通常,您可以转到windows builder中的“高级属性”面板来设置背景,但它在运行时不反映颜色。这样,问题就可以解决了

我在发帖之前读过这篇文章,意识到这可能是不可能的。我只是想知道是否有人有这个问题/已经想出了某种解决办法,即使说的解决办法是令人难以置信的黑客。也许是一个标签,上面有一个按钮的图像,颜色与你想要的颜色相同。当你“点击”按钮时会有一个额外的图像。我们只是选择在按钮上放置一个背景图像,将按钮和按钮边框之间的区域着色。或者,我们可以使用SWT_AWT桥接器并将SWT按钮集成到GUI中,但这会过于复杂,并且会花费太多时间。谢谢不幸的是,此程序同时在Solaris和Windows上运行,行为需要尽可能相似。令人沮丧的是,大量Windows颜色由系统主题控制。我祝你的项目好运。顺便说一下,我还为我的只读组合设置了白色。但是当我没有将背景设置为黑色时,矩形完全覆盖了组合框(看不到文本)。如何在不更改背景色的情况下设置组合的颜色?谢谢
public void setBackground(Color color)
btnNewButton.setBackground(SWTResourceManager.getColor(SWT.COLOR_BLUE));