我有一个GUI,从这个GUI我选择一个具有预订系统尺寸的输入文件(新的GUI)如果飞机有100个座位,GUI将是例如10x10,如果飞机有200个座位,它将是10x20,所有座位都将成为按钮,并且如果他们被预订则应该将乘客信息存储在他们身上。此外,预订的座位不会再被预订。
问题是GUI的尺寸会根据座位数量和方向而改变,这意味着在一个版本中可能会有很多按钮在另一个版本中更少,更多的座位意味着GUI将更长或更宽可能10厘米x 10 cm或10 cm x 20 cm,或15 cm x 25 cm ......
我想用for循环来做这个但是我不想把按钮从GUI中取出来。我不知道怎么能在任意旁边的另一个按钮旁边添加一个按钮。我总是使用Eclipse Window Builder来构建GUI,但我想我需要自己编写这个...有人可以帮我吗?有些提示吗?感谢您的时间!
答案 0 :(得分:2)
尝试这样的事情:
// 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的位置,它仍然会在'design'标签中显示它们。
希望这有帮助!
编辑:我对如何使用循环制作按钮有点模糊要制作带循环的按钮,您需要一个缓冲区(存储一个足够长的临时按钮以添加到列表中)和......列表: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,右键单击您的项目&gt;构建路径&gt;配置构建路径&gt; “库”选项卡&gt;添加外部JAR&gt;找到您下载的swt文件并单击。
很抱歉这么长的答案,希望有所帮助:D
答案 1 :(得分:1)
以GridLayout
开头。每次需要更改座位布局时,请重新应用GridLayout
。
即如果你需要100个座位,请使用类似新的GridLayout(20, 10)
...
就个人而言,我会使用GridBagLayout
,但对于手头的任务可能会很复杂
添加/删除新内容有点困难。我个人会重建UI并重新应用模型。
至于尺寸,您可能无法控制它,因为它在不同的屏幕上会有不同的显示方式。相反,您应该提供一些方法来阻止UI过度调整屏幕大小。
这可以通过将座位窗格放在JScrollPane
内来实现。这将允许座椅窗格在尺寸上扩展和缩小,而不会在屏幕上过大尺寸
看看