我正在尝试在JFrame
内创建一个相对小规模的基于文本的游戏。我打算将此JFrame
保持不变,因此我调用了setResizable(false)
。
我的目标是创建一个文本I / O功能,有点像控制台或命令提示符,所以我有两个JTextArea
,每个都在JScollPane
内,然后我添加了它们都是Box
,一个在另一个之上。我希望这些组件保持不变的大小,因此我使用适当的尺寸调用了setPreferredSize()
和setMaximumSize()
。
然而,当我向JFrame
添加其中两个Box时,会有一个水平间隙将它们分开。间隙似乎附在组件的右边框上。请参阅此行为的附图:
)。
我在内容窗格中使用FlowLayout
,hGap设置为0,但我添加的组件之间仍然存在差距,我无法弄清楚原因。
要确认JFrame
本身或其布局管理器不是问题,我还添加了两个包含按钮的框,以说明它们之间没有间隙。
如果可能的话,我想删除这些空白,或者至少确定导致它们的原因。在这一点上,我不知道还有什么可能导致这个问题,我很感激任何建议。
编辑:这是我希望这个演示类看起来像的图片:
我已将相关的代码段摘录到此类中以演示我的问题:
import javax.swing.*;
import java.awt.*;
public class Demo extends JFrame {
public Demo() {
super("Demo");
setSize(400, 400);
setResizable(false);
int Y_AXIS = BoxLayout.Y_AXIS;
getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
getContentPane().setBackground(Color.RED);
Box boxA = new Box(Y_AXIS);
boxA.add(createComponent("output"));
boxA.add(createComponent("input"));
this.add(boxA);
Box boxB = new Box(Y_AXIS);
boxB.add(createComponent("output"));
boxB.add(createComponent("input"));
this.add(boxB);
Box boxC = new Box(Y_AXIS);
boxC.add(new JButton("Button"));
boxC.add(new JButton("Button"));
this.add(boxC);
Box boxD = new Box(Y_AXIS);
boxD.add(new JButton("Button"));
boxD.add(new JButton("Button"));
this.add(boxD);
this.setVisible(true);
}
private JScrollPane createComponent(String initial) {
JTextArea ta = new JTextArea(3, 10);
ta.setText(initial);
JScrollPane sp = new JScrollPane(ta);
Dimension pref = new Dimension(100, 100);
sp.setPreferredSize(pref);
sp.setMaximumSize(pref);
sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
return sp;
}
public static void main(String[] args) {
Demo d = new Demo();
}
}
答案 0 :(得分:0)
我弄清楚导致出现差距的原因,尽管我对Swing或LayoutManagers不太熟悉,无法确切说明原因。
通过仅删除对内部组件的SELECT column1,
column2,
columnn,
subquery1.sq1,
subquery2.sq2,
(SELECT CASE
WHEN (subquery1.sq1) > 0 AND (subquery2.sq2) > 0 THEN
CAST ( (subquery1.sq1) / (subquery2.sq2) AS DECIMAL) * 100
ELSE
0
END)
AS "lessWastefulQueryResults"
FROM some_table
JOIN (SELECT *
FROM other_table
GROUP BY some_columns) subquery1
ON some_table.some_columns = subquery1.some_columns
JOIN (SELECT *
FROM yet_another_table
GROUP BY more_columns) subquery1
ON some_table.more_columns = subquery1.more_columns
的调用,程序按照我喜欢的方式工作。我的猜测是,当被要求使用绝对最大尺寸时,其中一个布局管理器(可能setMaximumSize()
内置的BoxLayout
)的行为与我的预期不同,而不是依赖于首选大小,让布局管理员完成工作。
这是修改过的代码,有问题的行被注释掉了。
Box
虽然这个解决方案做了我想要的,但它可能并不理想,正如Andrew Thompson在他的评论中提到的那样,我应该尽量避免设置任何首选/最大尺寸。