我一直在用Java开发一个以口袋妖怪为主题的问答游戏(模仿Sporcle,如果你熟悉的话)。除了程序的不同组件的布局之外,几乎所有东西都是我想要的。
对于不同的布局管理员,我从来都不是很好,我不知道如何让他们做我需要的。
这就是窗口现在的样子:
现在,我稍后将使用字体大小,但表格本身看起来就像我想要的那样。问题是,我希望它们在文本字段和按钮之下。这是我将所有组件添加到JPanel的代码部分:
panel.add(label,FlowLayout.LEFT); //adding the "big question text"
panel.add(answerfield); //adding the JTextField
panel.add(correctAnswerTracker); //adding the "x / 151" text
for(int x = sPanes.length-1; x >=0; x--) //as you keep adding to left, it gets pushed over, so doing it backwards results in the correct order
panel.add(sPanes[x],FlowLayout.LEFT);
//each table is in a scrollPane, and all my scrollPanes are in the array sPanes, so I'm looping through that to add the tables
panel.add(startStopButton); //button that says "Start"
panel.add(exit); //button that says "Exit
panel.add(timer); //the timer
正如您所看到的,添加文本字段和正确答案跟踪器的语句都是在表的add语句之前编写的,但表位于顶部。另外,我的表在该循环中的问题是以向后顺序添加的,因此我不得不反转循环迭代的方向以使表以正确的顺序出现。我尝试过使用setLocation和setBounds这样的东西来让我的组件更多地出现在我想要的地方,但什么都没发生。此外,所有内容都只是出现在表格下方的一行中(我知道这就是FlowLayout的作用),但我如何才能准确定制出现的位置?
答案 0 :(得分:3)
使用BorderLayout
围绕具有FlowLayout
的面板。BorderLayout.NORTH
。将所有应位于表格上方的内容放在面板中,并使用BorderLayout.SOUTH
添加。将所有应该位于表格下方的内容放在另一个面板中,并使用BorderLayout.CENTER
添加。然后将表格放在他们自己的面板中,就像现在一样,并将其添加到trigger AutoPopulate on Order_Master__c (before insert, before update) {
Set <ID> SetSpIds = new Set<ID>();
for(Order_Master__c om : trigger.new){
if(om.SellerProductId__c != null){
SetSpIds.add(om.SellerProductId__c);
}
}
MAP<ID, Sellar_Products__c> mapSp = new MAP<ID, Sellar_Products__c>
([select MRP__c, Offer_Rate__c, Selling_Price__c from Sellar_Products__c
where id in:SetSpIds]);
for(Order_Master__c om : trigger.new){
if(om.SellerProductId__c != null){
Sellar_Products__c Sp = mapSp.get(om.SellerProductId__c);
om.Item_Price__c = Sp.MRP__c;
om.Discount__c = Sp.Offer_Rate__c;
om.Total_cost__c = Sp.Selling_Price__c;
}
}
}
。
答案 1 :(得分:-1)
使用LayoutManager
或setLayout(null)
。在后一种情况下,您可以通过调用setBounds
来移动组件。我最近也一直这样做(不使用LayoutManager),这是非常自由的。