Topic: 关于给button加image的问题,请求帮助~~~

  Print this page

1.关于给button加image的问题,请求帮助~~~ Copy to clipboard
Posted by: qingxing2005
Posted on: 2005-03-12 08:54

import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.SWT;

public class B_I {

  private org.eclipse.swt.widgets.Shell sShell = null;
  private Button button = null;

  public static void main(String[] args) {
  org.eclipse.swt.widgets.Display display = org.eclipse.swt.widgets.Display.getDefault();    
  B_I thisClass = new B_I();
  thisClass.createSShell() ;
  thisClass.sShell.open();
    
  Image image = new Image(display, "E:\\eclipse-SDK-3.0-win32\\eclipse\\pictures\\sign.JPG"); //position 1
    
while (!thisClass.sShell.isDisposed()) {
    if (!display.readAndDispatch()) display.sleep ();
    }
    display.dispose();    
  }

  private void createSShell() {
    sShell = new org.eclipse.swt.widgets.Shell();    
    button = new Button(sShell, SWT.PUSH);
    sShell.setText("Shell");
    button.setBounds(new org.eclipse.swt.graphics.Rectangle(40,42,66,31));
    sShell.setSize(new org.eclipse.swt.graphics.Point(300,200));
    
//Image image = new Image(display, "E:\\eclipse-SDK-3.0-win32\\eclipse\\pictures\\sign.JPG"); //position 2

    button.setImage(image);
  }
}
想给button加个图片。
问题:怎么解决display和button.setImage的问题?
1.如果在position2的位置上写,display找不到。
2.如果将Image image = new Image(display, "E:\\eclipse-SDK-3.0-win32\\eclipse\\pictures\\sign.JPG");这句话写在position 1的位置上,button.setImage(image)却不能调用image.

应该怎么做才能解决问题,或许是这种做法本来就不行?

2.Re:关于给button加image的问题,请求帮助~~~ [Re: qingxing2005] Copy to clipboard
Posted by: jackzhuo
Posted on: 2005-03-12 16:08

private void createSShell() 方法中将display传入不就可以了?!
如:
private void createSShell(Display display)

这样就可以在position 2生成一个image了.

3.Re:关于给button加image的问题,请求帮助~~~ [Re: qingxing2005] Copy to clipboard
Posted by: qingxing2005
Posted on: 2005-03-12 20:41

谢谢楼上的帮忙。
还有一个问题,如果想将image和button的底色设置为一样的颜色,例如button为灰色,Image的背景为白色(截图后)。除了用PS,或是简单一点的画板修改之外,在SWT中间有什么特别的设置么?例如把button上面的图片调为灰色的背景。SWT能做么?不过在Image里面好像没有发现。

4.Re:关于给button加image的问题,请求帮助~~~ [Re: qingxing2005] Copy to clipboard
Posted by: yipsilon
Posted on: 2005-03-13 02:46

1. display是main方法中的局部变量, 此类变量只能在方法中调用, 其他方法无法访问, 除非作为其他方法的参数把该变量传递, 就像jackzhuo兄说的.

2. 如下:
...
thisClass.createSShell() ;
thisClass.sShell.open();

Image image = new Image(display, "E:\\eclipse-SDK-3.0-win32\\eclipse\\pictures\\sign.JPG"); //position 1
...
你的createSShell()方法在声明image前面调用, 而button.setImage(image)在createSShell方法中, 也就是说image还没创建你就去调用image当然出错嘛.

楼主的这段代码其实在语法上就有错误, 楼主你应该找个JavaIDE运行一下就知道了, 不过还是强烈建议楼主好好看Java基础. ^_^

5.Re:关于给button加image的问题,请求帮助~~~ [Re: qingxing2005] Copy to clipboard
Posted by: qingxing2005
Posted on: 2005-03-15 22:17

谢谢yipsilon的回答,

我会花时间好好看看JAVA基础的,只不过现在的时间不是很多。多谢你的建议。:0)

“还有一个问题,如果想将image和button的底色设置为一样的颜色,例如button为灰色,Image的背景为白色(截图后)。除了用PS,或是简单一点的画板修改之外,在SWT中间有什么特别的设置么?例如把button上面的图片调为灰色的背景。SWT能做么?不过在Image里面好像没有发现。”

对了,这个问题能解决么?

6.Re:关于给button加image的问题,请求帮助~~~ [Re: qingxing2005] Copy to clipboard
Posted by: kite
Posted on: 2005-03-16 17:24

问题 1:其实你没有必要传递它,在用的地方同样用org.eclipse.swt.widgets.Display.getDefault();即可。
问题 2:在SWT中是可以做的,可以参考http://www.eclipse.org/articles/Article-SWT-images/graphics-resources.html

7.Re:关于给button加image的问题,请求帮助~~~ [Re: qingxing2005] Copy to clipboard
Posted by: jackzhuo
Posted on: 2005-03-30 18:37

qingxing2005 wrote:
“还有一个问题,如果想将image和button的底色设置为一样的颜色,例如button为灰色,Image的背景为白色(截图后)。除了用PS,或是简单一点的画板修改之外,在SWT中间有什么特别的设置么?例如把button上面的图片调为灰色的背景。SWT能做么?不过在Image里面好像没有发现。”

我想可能没有什么其它的方法(或许我不知道Big Smile),不过我们现在在使用的很多C++ BUILDER的类似控件,也都是要指定两张图的。

其实我也在找是否有这样的SWT控件,如果有的话,我们的系统可以完成移植到Java上了,哈哈

8.Re:关于给button加image的问题,请求帮助~~~ [Re: jackzhuo] Copy to clipboard
Posted by: qingxing2005
Posted on: 2005-03-30 18:53

jackzhuo wrote:
我想可能没有什么其它的方法(或许我不知道Big Smile),不过我们现在在使用的很多C++ BUILDER的类似控件,也都是要指定两张图的。

其实我也在找是否有这样的SWT控件,如果有的话,我们的系统可以完成移植到Java上了,哈哈


那就是说要想让image和button有一样的颜色(例如全为灰色),除了用PS改,没有其他办法了?

9.Re:关于给button加image的问题,请求帮助~~~ [Re: qingxing2005] Copy to clipboard
Posted by: kite
Posted on: 2005-03-31 11:03

用透明色绘制image不行吗?

10.Re:关于给button加image的问题,请求帮助~~~ [Re: kite] Copy to clipboard
Posted by: qingxing2005
Posted on: 2005-03-31 17:41

kite wrote:
用透明色绘制image不行吗?

在SWT中么?能不能给个例子呢?不知道用什么方法。。。

不好意思,谢谢~~~~

11.Re:关于给button加image的问题,请求帮助~~~ [Re: qingxing2005] Copy to clipboard
Posted by: kite
Posted on: 2005-04-01 11:06

下面是示例代码,用自己的image文件替换里面的image文件。不过此代码只是示意的,如果真正使用,还是需要添加一些东西的。

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;

public class Test {
  
  public static void main(String[] args) {
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());
    
    ImageData ideaData = new ImageData(Snippet1.class.getResourceAsStream("Idea.gif"));
    int whitePixel = ideaData.palette.getPixel(new RGB(255,255,255));
    ideaData.transparentPixel = whitePixel;
    final Image transparentIdeaImage = new Image(display,ideaData);

    final Button label = new Button(shell,SWT.NONE);
    
    label.addPaintListener(new PaintListener() {
      public void paintControl(PaintEvent e) {
        
        e.gc.drawImage(transparentIdeaImage,e.width / 2,e.height / 2);
      }
    });
    
    label.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(org.eclipse.swt.events.SelectionEvent e){
        label.redraw();
      }
    });
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
  }

}


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923