尝试这样的事情:
// The size of the window.
Rectangle bounds = this.getBounds();
// How many rows of buttons.
int numOfRows = 100;
// How many buttons per row.
int numOfColumns = 50;
int buttonWidth = bounds.width / numOfRows;
int buttonHeight = bounds.height / numOfColumns;
int x = 0;
int y = 0;
for(int i = 0; i < numOfColumns; i++){
for(int j = 0; j < numOfRows; j++){
// Make a button
button.setBounds(x, y, buttonWidth, buttonHeight);
y += buttonHeight;
}
x += buttonWidth;
}
这将使所有按钮都适合您的窗口。
这是一个关于矩形的链接,在做这样的事情时它们非常方便。
http://help.eclipse.org/helios/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fswt%2Fgraphics%2FRectangle.html
此外,您仍然可以使用 windowbuilder,事实上我建议您这样做。它确实可以帮助您可视化所需的尺寸。并且您还可以使用代码手动创建东西(按钮、列表、下拉列表...等),并且假设您将变量放在 WindowBuilder 的位置,它仍然会在“设计”选项卡中显示它们。
希望这可以帮助!
编辑:我对如何使用循环制作按钮有点模糊
要制作带有循环的按钮,您将需要一个缓冲区(存储一个足够长的临时按钮以添加到列表中)和...一个列表:D。
它应该是这样的:
外循环:
// The list to store your buttons in.
ArrayList<Button> buttons = new ArrayList<Button>();
// The empty button to use as a buffer.
Button button;
内部循环(“//制作按钮”注释所在的位置):
button = new Button(this, SWT.NONE);
buttons.add(button);
现在您拥有所有按钮的列表,并且可以轻松访问它们并进行更改,例如更改按钮文本;
buttons.get(indexOfButton).setText("SomeText");
编辑:
看到你是 swt 的新手(而且我无法让 awt/JFrame 工作)这里是完整的代码。
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class ButtonTest extends Shell {
/**
* Launch the application.
* @param args
*/
// Code starts here in main.
public static void main(String args[]) {
try {
Display display = Display.getDefault();
// Creates a window (shell) called "shell"
ButtonTest shell = new ButtonTest(display);
// These two lines start the shell.
shell.open();
shell.layout();
// Now we can start adding stuff to our shell.
// The size of the window.
Rectangle bounds = shell.getBounds();
// How many rows of buttons.
int numOfRows = 5;
// How many buttons per row.
int numOfColumns = 3;
int buttonWidth = bounds.width / numOfRows;
int buttonHeight = bounds.height / numOfColumns;
Button button;
int x = 0;
int y = 0;
for(int i = 0; i < numOfColumns; i++){
for(int j = 0; j < numOfRows; j++){
button = new Button(shell, SWT.NONE);
button.setBounds(x, y, buttonWidth, buttonHeight);
x += buttonWidth;
}
x = 0;
y += buttonHeight;
}
// This loop keeps the shell from killing itself the moment it's opened
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the shell.
* @param display
*/
public ButtonTest(Display display) {
super(display, SWT.SHELL_TRIM);
createContents();
}
/**
* Create contents of the shell.
*/
protected void createContents() {
setText("SWT Application");
setSize(800, 800);
}
@Override
protected void checkSubclass() {
// Disable the check that prevents subclassing of SWT components
}
另外,我在嵌套循环中犯了一个小错误(并且忘记在每行之后将 x 值重置为 0)。它已在此编辑中修复。
此外,您需要导入 swt 才能使其正常工作。转到此处: http: //www.eclipse.org/swt/并下载适用于您的操作系统的最新版本,然后进入 eclipse,右键单击您的项目 > 构建路径 > 配置构建路径 > 库选项卡 > 添加外部 JAR > 查找您下载的 swt 文件并单击。
抱歉这么长的答案,希望对您有所帮助:D