在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控件中的数据是可变的,怎样更改完善。

解决方案 »

  1.   

    原图是显示的300个按钮。
    要点击“显示500个button”的按钮后,在右边显示图片中相同的500个按钮。各位高手帮忙解决。
      

  2.   

    org.eclipse.swt.layout.grouplayout.GroupLayout那个jar的啊
      

  3.   

    还真得靠自己!
    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;
    }
    }