gpt4 book ai didi

java - SWT : Repositioning/refreshing buttons in composite and setting composite size according to visible components

转载 作者:行者123 更新时间:2023-11-29 03:37:32 29 4
gpt4 key购买 nike

我想根据按钮的可见性属性重绘组合中的按钮。我根据其中的按钮进行合成以调整大小,并且我正在使用以下代码来刷新合成。问题:下面的代码工作正常,但按钮从未在复合中重新定位请帮忙。代码中是否缺少要重新定位的内容?

public void redraw_buttons() {
int offsetButton = 5;
int buttonHeight =28*3;

for (Control kid : compositeButtons.getChildren()) {
if (kid.getClass() == Button.class) {
if(kid.getVisible() == true){
kid.setLocation(0, 0);//layout(true, true);
kid.setSize(50,60);
kid.redraw();
kid.pack();
compositeButtons.redraw();
kid.setRedraw(true);
kid.setBounds(10, offsetButton, 259, buttonHeight);
kid.redraw();
offsetButton = offsetButton + buttonHeight;
}}
}
compositeButtons.redraw();
}

我还使用以下代码在复合 Material 上创建按钮

//初始化复合---

compositeButtons = new Composite(shell, SWT.BORDER);
compositeButtons.setLayout(null);
FormData fd_compositeButtons = new FormData();
fd_compositeButtons.top = new FormAttachment(lblUserLoggedinOnServer, 6);
fd_compositeButtons.bottom = new FormAttachment(textRecentLog, -6);
fd_compositeButtons.right = new FormAttachment(textRecentLog, 0, SWT.RIGHT);
fd_compositeButtons.left = new FormAttachment(0, 30);
compositeButtons.setLayoutData(fd_compositeButtons);

compositeButtons.layout(true, true);
getShell().layout(true, true);

//添加按钮到复合-

int offsetButton = 5;
int buttonHeight =28*3;

MakeAppointmentRequestButton = new Button(compositeButtons, SWT.NONE);
MakeAppointmentRequestButton.setBounds(10, offsetButton, 259, buttonHeight);
//MakeAppointmentRequestButton.layout(true, true);
MakeAppointmentRequestButton.setRedraw(true);
MakeAppointmentRequestButton.setText("Make Appointment");

offsetButton = offsetButton + buttonHeight;

GotoAppointmentRequestButton = new Button(compositeButtons, SWT.NONE);
GotoAppointmentRequestButton.setBounds(10, offsetButton, 259, buttonHeight);//(10, offsetButton, 259, 28*3);
GotoAppointmentRequestButton.setRedraw(true);
GotoAppointmentRequestButton.setText("Goto Appointment");

offsetButton = offsetButton + buttonHeight;

CancelAppointmentRequestButton= new Button(compositeButtons, SWT.NONE);
CancelAppointmentRequestButton.setBounds(10, offsetButton, 259, buttonHeight);//(10, 28*3+5, 259, 28*3);
CancelAppointmentRequestButton.setRedraw(true);
CancelAppointmentRequestButton.setText("Cancel Appointment");

offsetButton = offsetButton + buttonHeight;

我看过各种链接也试过 pack(), redraw() 属性。但是问题:即使在调用自定义函数 redraw_buttons() 时,按钮也永远不会在复合中重新定位;

请帮忙。重新定位的代码中是否缺少某些东西?请建议这样做的方法。我是 SWT 新手。

谢谢..

******* 编辑新更新 ********

错误是由于

1.) redraw_buttons() 函数未在主线程上调用。

_appLoader.display.getDefault().asyncExec(new Runnable() {
public void run() {
_appLoader.MyObj.redraw_buttons();
}
});
// This gave access to main thread.

2.) 未在 redraw_buttons() 中调整复合框架的大小;

// Code: On Which I am still working upon.

enter image description here我应该调整外壳的大小吗?请建议。

感谢您的帮助。

最佳答案

这里有一些代码可以满足您的需求,或者至少向您展示如何实现它:

public static void main(String[] args)
{
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(2, true));

// Stretch first label horizontally
Label upperLeft = new Label(shell, SWT.NONE);
upperLeft.setText("Label 1 name");
upperLeft.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false));

// Stretch second label horizontally but align to the right
Label upperRight = new Label(shell, SWT.NONE);
upperRight.setText("time");
upperRight.setLayoutData(new GridData(SWT.END, SWT.BEGINNING, true, false));

// Stretch button comp in both directions
Composite buttonComp = new Composite(shell, SWT.BORDER);
buttonComp.setLayout(new GridLayout(1, true));
GridData buttonData = new GridData(SWT.FILL, SWT.FILL, true, true);
buttonData.horizontalSpan = 2;
buttonComp.setLayoutData(buttonData);

Button one = new Button(buttonComp, SWT.PUSH);
one.setText("Button 1");
one.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
Button two = new Button(buttonComp, SWT.PUSH);
two.setText("Button 2");
two.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
Button three = new Button(buttonComp, SWT.PUSH);
three.setText("Button 3");
three.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

// Stretch third label horizontally
Label lowerLeft = new Label(shell, SWT.NONE);
lowerLeft.setText("Label 2");
lowerLeft.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false));

// Stretch fourth label horizontally
Label lowerRight = new Label(shell, SWT.NONE);
lowerRight.setText("Label 3");
lowerRight.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false));

shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}

这是它启动时的样子:

enter image description here

调整大小后:

enter image description here

关于java - SWT : Repositioning/refreshing buttons in composite and setting composite size according to visible components,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14723968/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com