在SWT应用中,怎样将新数据显示到新窗口中(SWT局部控件的数据显示)。
package testEntity;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Random;
import java.util.concurrent.CountDownLatch;import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.ScrollBar;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.layout.grouplayout.GroupLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.grouplayout.LayoutStyle;public class SWTColorDemo { protected Shell shell;
private Group group;
private Color color = null;
private Composite composite_1;
private Composite composite;
private Button button;
private Label label;
private int count = 300 ; /**
* Launch the application.
*
* @param args
*/
public static void main(String[] args) {
try {
SWTColorDemo window = new SWTColorDemo();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* Open the window.
*/
public void open() {
Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
} /**
* Create contents of the window.
*/
protected void createContents() {
shell = new Shell();
shell.setSize(944, 664);
shell.setText("SWT Application");
shell.setLayout(new FillLayout(SWT.HORIZONTAL));
{
composite = new Composite(shell, SWT.BORDER);
Button button = new Button(composite, SWT.FLAT | SWT.TOGGLE);
button.setSize(200, 200);
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
color = (new ProduceColor()).produceColor();
}
});
button.setText("改变字体颜色");
{
group = new Group(composite, SWT.NULL);
group.setLayout(new FillLayout(SWT.HORIZONTAL));
{
final Canvas canvas = new Canvas(group, SWT.NONE);
canvas.setBackground(new Color(Display.getDefault(), 200,200, 200));
Button btnbutton = new Button(composite, SWT.NONE);
btnbutton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
count = 500;
}
});
btnbutton.setText("显示500个button");
GroupLayout gl_composite = new GroupLayout(composite);
gl_composite.setHorizontalGroup(
gl_composite.createParallelGroup(GroupLayout.LEADING)
.add(group, GroupLayout.DEFAULT_SIZE, 464, Short.MAX_VALUE)
.add(gl_composite.createSequentialGroup()
.add(122)
.add(button)
.add(40)
.add(btnbutton)
.addContainerGap(146, Short.MAX_VALUE))
);
gl_composite.setVerticalGroup(
gl_composite.createParallelGroup(GroupLayout.LEADING)
.add(gl_composite.createSequentialGroup()
.add(group, GroupLayout.DEFAULT_SIZE, 529, Short.MAX_VALUE)
.add(41)
.add(gl_composite.createParallelGroup(GroupLayout.BASELINE)
.add(button)
.add(btnbutton))
.add(34))
);
composite.setLayout(gl_composite);
canvas.addMouseListener(new MouseAdapter() {
@Override
public void mouseDown(MouseEvent e) {
if (color != null) {
GC gc = new GC(canvas);
Rectangle rect = canvas.getClientArea();
gc.fillRectangle(rect.x, rect.y, rect.width,rect.height);
gc.setForeground(color);
Font font = new Font(Display.getDefault(),"Arial", 32, SWT.BOLD);
gc.setFont(font);
gc.drawText("SHOW TEXT", e.x, e.y);
}
}
});
}
}
}
final ScrolledComposite scrolledComposite = new ScrolledComposite(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
composite_1 = new Composite(scrolledComposite, SWT.NONE);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 5;
composite_1.setLayout(gridLayout);
{
for (int i = 0; i < count; i++) {
Group group_1 = new Group(composite_1, SWT.NONE);
group_1.setSize(200, 200);
group_1.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true,true, 1, 1));
{
button = new Button(group_1, SWT.NONE);
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(new File(".\\IMAGE\\a.jpg"));
ImageData imageData = new ImageData(inputStream);
button.setImage(new Image(Display.getDefault(), imageData));
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
button.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
color = new ProduceColor().produceColor();
} @Override
public void widgetDefaultSelected(SelectionEvent e) { }
});
}
{
label = new Label(group_1, SWT.NONE);
label.setBounds(10, 40, 54, 12);
label.setText("Label" + i);
} GroupLayout gl_group_1 = new GroupLayout(group_1);
gl_group_1.setHorizontalGroup(gl_group_1.createParallelGroup(GroupLayout.LEADING).add(button,GroupLayout.DEFAULT_SIZE, 90, Short.MAX_VALUE).add(
GroupLayout.TRAILING,gl_group_1.createSequentialGroup().add(10).add(label,GroupLayout.DEFAULT_SIZE, 101, Short.MAX_VALUE).addContainerGap()));
gl_group_1.setVerticalGroup(gl_group_1.createParallelGroup(GroupLayout.LEADING).add(GroupLayout.TRAILING,gl_group_1.createSequentialGroup().addContainerGap()
.add(button, GroupLayout.DEFAULT_SIZE, 84,Short.MAX_VALUE).addPreferredGap(LayoutStyle.UNRELATED).add(label).addContainerGap()));
group_1.setLayout(gl_group_1);
}
}
ScrollBar vscrollBar = scrolledComposite.getVerticalBar();
vscrollBar.setIncrement(100);
scrolledComposite.setContent(composite_1);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
scrolledComposite.setMinSize(composite_1.computeSize(SWT.DEFAULT,SWT.DEFAULT));
scrolledComposite.setFocus();
}
}class ProduceColor {
public Color produceColor() {
Random random = new Random();
int red = random.nextInt(255);
int green = random.nextInt(255);
int blue = random.nextInt(255);
System.out.println("(" + red + "," + green + "," + blue + ")");
RGB rgb = new RGB(red, green, blue);
Color color = new Color(Display.getDefault(), rgb);
return color;
}
}上面代码是实现整体效果。要求将上面的功能进行完善,瓶颈主要卡在那个ScrolledComposite控件中的数据是可变的,怎样更改完善。
package testEntity;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Random;
import java.util.concurrent.CountDownLatch;import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.ScrollBar;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.layout.grouplayout.GroupLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.grouplayout.LayoutStyle;public class SWTColorDemo { protected Shell shell;
private Group group;
private Color color = null;
private Composite composite_1;
private Composite composite;
private Button button;
private Label label;
private int count = 300 ; /**
* Launch the application.
*
* @param args
*/
public static void main(String[] args) {
try {
SWTColorDemo window = new SWTColorDemo();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* Open the window.
*/
public void open() {
Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
} /**
* Create contents of the window.
*/
protected void createContents() {
shell = new Shell();
shell.setSize(944, 664);
shell.setText("SWT Application");
shell.setLayout(new FillLayout(SWT.HORIZONTAL));
{
composite = new Composite(shell, SWT.BORDER);
Button button = new Button(composite, SWT.FLAT | SWT.TOGGLE);
button.setSize(200, 200);
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
color = (new ProduceColor()).produceColor();
}
});
button.setText("改变字体颜色");
{
group = new Group(composite, SWT.NULL);
group.setLayout(new FillLayout(SWT.HORIZONTAL));
{
final Canvas canvas = new Canvas(group, SWT.NONE);
canvas.setBackground(new Color(Display.getDefault(), 200,200, 200));
Button btnbutton = new Button(composite, SWT.NONE);
btnbutton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
count = 500;
}
});
btnbutton.setText("显示500个button");
GroupLayout gl_composite = new GroupLayout(composite);
gl_composite.setHorizontalGroup(
gl_composite.createParallelGroup(GroupLayout.LEADING)
.add(group, GroupLayout.DEFAULT_SIZE, 464, Short.MAX_VALUE)
.add(gl_composite.createSequentialGroup()
.add(122)
.add(button)
.add(40)
.add(btnbutton)
.addContainerGap(146, Short.MAX_VALUE))
);
gl_composite.setVerticalGroup(
gl_composite.createParallelGroup(GroupLayout.LEADING)
.add(gl_composite.createSequentialGroup()
.add(group, GroupLayout.DEFAULT_SIZE, 529, Short.MAX_VALUE)
.add(41)
.add(gl_composite.createParallelGroup(GroupLayout.BASELINE)
.add(button)
.add(btnbutton))
.add(34))
);
composite.setLayout(gl_composite);
canvas.addMouseListener(new MouseAdapter() {
@Override
public void mouseDown(MouseEvent e) {
if (color != null) {
GC gc = new GC(canvas);
Rectangle rect = canvas.getClientArea();
gc.fillRectangle(rect.x, rect.y, rect.width,rect.height);
gc.setForeground(color);
Font font = new Font(Display.getDefault(),"Arial", 32, SWT.BOLD);
gc.setFont(font);
gc.drawText("SHOW TEXT", e.x, e.y);
}
}
});
}
}
}
final ScrolledComposite scrolledComposite = new ScrolledComposite(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
composite_1 = new Composite(scrolledComposite, SWT.NONE);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 5;
composite_1.setLayout(gridLayout);
{
for (int i = 0; i < count; i++) {
Group group_1 = new Group(composite_1, SWT.NONE);
group_1.setSize(200, 200);
group_1.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true,true, 1, 1));
{
button = new Button(group_1, SWT.NONE);
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(new File(".\\IMAGE\\a.jpg"));
ImageData imageData = new ImageData(inputStream);
button.setImage(new Image(Display.getDefault(), imageData));
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
button.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
color = new ProduceColor().produceColor();
} @Override
public void widgetDefaultSelected(SelectionEvent e) { }
});
}
{
label = new Label(group_1, SWT.NONE);
label.setBounds(10, 40, 54, 12);
label.setText("Label" + i);
} GroupLayout gl_group_1 = new GroupLayout(group_1);
gl_group_1.setHorizontalGroup(gl_group_1.createParallelGroup(GroupLayout.LEADING).add(button,GroupLayout.DEFAULT_SIZE, 90, Short.MAX_VALUE).add(
GroupLayout.TRAILING,gl_group_1.createSequentialGroup().add(10).add(label,GroupLayout.DEFAULT_SIZE, 101, Short.MAX_VALUE).addContainerGap()));
gl_group_1.setVerticalGroup(gl_group_1.createParallelGroup(GroupLayout.LEADING).add(GroupLayout.TRAILING,gl_group_1.createSequentialGroup().addContainerGap()
.add(button, GroupLayout.DEFAULT_SIZE, 84,Short.MAX_VALUE).addPreferredGap(LayoutStyle.UNRELATED).add(label).addContainerGap()));
group_1.setLayout(gl_group_1);
}
}
ScrollBar vscrollBar = scrolledComposite.getVerticalBar();
vscrollBar.setIncrement(100);
scrolledComposite.setContent(composite_1);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
scrolledComposite.setMinSize(composite_1.computeSize(SWT.DEFAULT,SWT.DEFAULT));
scrolledComposite.setFocus();
}
}class ProduceColor {
public Color produceColor() {
Random random = new Random();
int red = random.nextInt(255);
int green = random.nextInt(255);
int blue = random.nextInt(255);
System.out.println("(" + red + "," + green + "," + blue + ")");
RGB rgb = new RGB(red, green, blue);
Color color = new Color(Display.getDefault(), rgb);
return color;
}
}上面代码是实现整体效果。要求将上面的功能进行完善,瓶颈主要卡在那个ScrolledComposite控件中的数据是可变的,怎样更改完善。
要点击“显示500个button”的按钮后,在右边显示图片中相同的500个按钮。各位高手帮忙解决。
package testEntity;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Random;import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.ScrollBar;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.layout.grouplayout.GroupLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.grouplayout.LayoutStyle;public class SWTColorDemo { protected Shell shell;
private Group group;
private Color color = null;
private Composite composite_1;
private Composite composite;
private int count = 300;
private ScrolledComposite scrolledComposite; /**
* Launch the application.
*
* @param args
*/
public static void main(String[] args) {
try {
SWTColorDemo window = new SWTColorDemo();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* Open the window.
*/
public void open() {
Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
} /**
* Create contents of the window.
*/
protected void createContents() {
shell = new Shell();
shell.setSize(944, 664);
shell.setText("SWT Application");
shell.setLayout(new FillLayout(SWT.HORIZONTAL));
{
composite = new Composite(shell, SWT.BORDER);
Button button = new Button(composite, SWT.NONE);
button.setSize(200, 200);
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
color = (new ProduceColor()).produceColor();
}
});
button.setText("改变字体颜色");
{
group = new Group(composite, SWT.NULL);
group.setLayout(new FillLayout(SWT.HORIZONTAL));
{
final Canvas canvas = new Canvas(group, SWT.NONE);
canvas.setBackground(new Color(Display.getDefault(), 200,
200, 200));
Button btnButton = new Button(composite, SWT.NONE);
btnButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
showSomething(500);
}
});
btnButton.setText("500 BUTTON");
GroupLayout gl_composite = new GroupLayout(composite);
gl_composite.setHorizontalGroup(gl_composite
.createParallelGroup(GroupLayout.LEADING).add(
group, GroupLayout.DEFAULT_SIZE, 464,
Short.MAX_VALUE).add(
gl_composite.createSequentialGroup().add(
122).add(button).add(28).add(
btnButton).addContainerGap(158,
Short.MAX_VALUE)));
gl_composite.setVerticalGroup(gl_composite
.createParallelGroup(GroupLayout.LEADING).add(
gl_composite.createSequentialGroup().add(
group, GroupLayout.DEFAULT_SIZE,
529, Short.MAX_VALUE).add(41).add(
gl_composite.createParallelGroup(
GroupLayout.BASELINE).add(
button).add(btnButton))
.add(34)));
composite.setLayout(gl_composite);
canvas.addMouseListener(new MouseAdapter() {
@Override
public void mouseDown(MouseEvent e) {
if (color != null) {
GC gc = new GC(canvas);
Rectangle rect = canvas.getClientArea();
gc.fillRectangle(rect.x, rect.y, rect.width,
rect.height);
gc.setForeground(color);
Font font = new Font(Display.getDefault(),
"Arial", 32, SWT.BOLD);
gc.setFont(font);
gc.drawText("SHOW TEXT", e.x, e.y);
}
}
});
}
}
}
showSomething(300);
} public void showSomething(int count) {
if (scrolledComposite == null) {
scrolledComposite = new ScrolledComposite(shell, SWT.BORDER
| SWT.H_SCROLL | SWT.V_SCROLL);
}
composite_1 = new Composite(scrolledComposite, SWT.NONE);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 5;
composite_1.setLayout(gridLayout);
{
for (int i = 0; i < count; i++) {
Group group_1 = new Group(composite_1, SWT.NONE);
Button button2 = new Button(group_1, SWT.NONE);
Label label2 = new Label(group_1, SWT.NONE);
group_1.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER,
true, true, 1, 1));
{
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(new File(
".\\IMAGE\\a.jpg"));
ImageData imageData = new ImageData(inputStream);
button2.setImage(new Image(Display.getDefault(),
imageData));
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
button2.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
color = new ProduceColor().produceColor();
} @Override
public void widgetDefaultSelected(SelectionEvent e) { }
});
}
{ label2.setBounds(10, 40, 54, 12);
label2.setText("Label" + i);
} GroupLayout gl_group_1 = new GroupLayout(group_1);
gl_group_1.setHorizontalGroup(gl_group_1.createParallelGroup(
GroupLayout.LEADING).add(button2,
GroupLayout.DEFAULT_SIZE, 90, Short.MAX_VALUE).add(
GroupLayout.TRAILING,
gl_group_1.createSequentialGroup().add(10).add(label2,
GroupLayout.DEFAULT_SIZE, 101, Short.MAX_VALUE)
.addContainerGap())); gl_group_1.setVerticalGroup(gl_group_1.createParallelGroup(
GroupLayout.LEADING).add(
GroupLayout.TRAILING,
gl_group_1.createSequentialGroup().addContainerGap()
.add(button2, GroupLayout.DEFAULT_SIZE, 84,
Short.MAX_VALUE).addPreferredGap(
LayoutStyle.UNRELATED).add(label2)
.addContainerGap()));
group_1.setLayout(gl_group_1);
}
}
ScrollBar vscrollBar = scrolledComposite.getVerticalBar();
vscrollBar.setIncrement(100);
scrolledComposite.setContent(composite_1);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
scrolledComposite.setMinSize(composite_1.computeSize(SWT.DEFAULT,
SWT.DEFAULT));
scrolledComposite.setFocus();
}
}class ProduceColor {
public Color produceColor() {
Random random = new Random();
int red = random.nextInt(255);
int green = random.nextInt(255);
int blue = random.nextInt(255);
System.out.println("(" + red + "," + green + "," + blue + ")");
RGB rgb = new RGB(red, green, blue);
Color color = new Color(Display.getDefault(), rgb);
return color;
}
}