(Java)尝试使用JPanel中的其他元素格式化多个JTable的布局

时间:2017-12-07 01:54:38

标签: java swing jtable jpanel flowlayout

我一直在用Java开发一个以口袋妖怪为主题的问答游戏(模仿Sporcle,如果你熟悉的话)。除了程序的不同组件的布局之外,几乎所有东西都是我想要的。

对于不同的布局管理员,我从来都不是很好,我不知道如何让他们做我需要的。

这就是窗口现在的样子:

Pokemon Quiz Window Image

现在,我稍后将使用字体大小,但表格本身看起来就像我想要的那样。问题是,我希望它们在文本字段和按钮之下。这是我将所有组件添加到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的作用),但我如何才能准确定制出现的位置?

2 个答案:

答案 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)

使用LayoutManagersetLayout(null)。在后一种情况下,您可以通过调用setBounds来移动组件。我最近也一直这样做(不使用LayoutManager),这是非常自由的。