我試圖在JFrame
中創建一個相對較小規模的基於文本的遊戲。我打算保持這個JFrame
在一個恆定的大小,所以我打電話setResizable(false)
。JFrame中盒裝JScrollPanes之間的額外空間
我的目標是使該有所表現得像一個控制檯或命令提示符下一個文本I/O功能,所以我有一個JScollPane
內的兩個JTextArea
S,各自,然後我他們倆加入Box
,一個在另一個之上。我希望這些組件保持恆定的尺寸,所以我使用適當的尺寸調用了setPreferredSize()
和setMaximumSize()
。
但是,當我將這兩個盒子添加到JFrame
時,它們之間存在橫向差距。差距似乎附在組件的右側邊框上。請參閱此行爲的附圖:
)。
我在內容窗格中使用了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();
}
}
1)空格似乎來自'Box'而不是'FlowLayout'。2)提供ASCII藝術或簡單的GUI圖形佈局。 –
@AndrewThompson謝謝你的提示!正如你所建議的那樣,我用一張我想讓GUI看起來像的圖片來修改這篇文章。基本上,我只是想消除差距。你有什麼想法,盒子可能會導致它出現?我很困惑 - JButtons也在盒子裏,但沒有顯示任何差距。 – kattusite
我可能會使用四個面板。 1)用於文本區域的2x2'GridLayout'。 2)按鈕的2x2'GridLayout'。 3)用於居中包含按鈕的面板的'GridBagLayout'。 4)用於文本區域面板('LINE_START')的'BorderLayout',以及使用'GridBagLayout'('LINE_END')的面板。 - 不要混淆首選。最小或最大尺寸的任何東西。將「EmptyBorder」添加到具有邊框佈局的面板,然後在顯示幀之前打包該幀。 –