Java 为什么这个区域很小?
我尝试在SWING中制作一个简单的应用程序:使用JFrame上的BorderLayout布局,我在南部放置一个执行按钮,在西部放置一个包含组合框的面板,在东部放置一个包含2个JTextAreas的面板。问题是,这两个区域都非常小。欢迎提供任何帮助和解释 这是带有两个文本区域的面板代码Java 为什么这个区域很小?,java,swing,layout-manager,jtextarea,Java,Swing,Layout Manager,Jtextarea,我尝试在SWING中制作一个简单的应用程序:使用JFrame上的BorderLayout布局,我在南部放置一个执行按钮,在西部放置一个包含组合框的面板,在东部放置一个包含2个JTextAreas的面板。问题是,这两个区域都非常小。欢迎提供任何帮助和解释 这是带有两个文本区域的面板代码 package cipher; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayo
package cipher;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.border.Border;
class TextPanel extends JPanel {
private JTextArea inputArea, outputArea;
public TextPanel() {
initSize();
initTextArea();
initBorder();
initLayout();
packing();
}
private void packing() {
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.weighty = 1;
add(inputArea,gbc);
gbc.gridx = 0;
gbc.gridy = 1;
gbc.weightx = 1;
gbc.weighty = 1;
add(outputArea,gbc);
}
private void initBorder() {
Border outer = BorderFactory.createEmptyBorder(5, 5, 5, 5);
Border inner = BorderFactory.createTitledBorder("Text");
setBorder(BorderFactory.createCompoundBorder(outer,inner));
}
private void initLayout() {
setLayout(new GridBagLayout());
}
private void initTextArea() {
inputArea = new JTextArea();
inputArea.setPreferredSize(new Dimension(385,400));
outputArea = new JTextArea();
outputArea.setPreferredSize(new Dimension(385,400));
}
private void initSize() {
Dimension size = getPreferredSize();
size.width = 390;
setPreferredSize(size);
}
}
我尝试过使用setSize(x,y),但没有成功。我尝试过使用JTextArea(行、列),但没有成功。我甚至使用了带有维度的setPreferredSize,但没有成功
问题的可能原因是容器区域小于文本区域的首选大小,
GridBagLayout
将默认为最小大小
这是一个很好的例子,说明了为什么您应该避免直接设置这些特性,而是使用布局管理器和零部件特性
首先,使用JTextArea
的列
和行
属性。这将更好地“猜测”显示文本所需的空间量,以适应这些限制
其次,使用GridBagConstraints#fill
覆盖GridBagLayout
,并强制其利用可用空间
我也会改变
inputArea = new JTextArea(10, 20);
inputArea.setBorder(new LineBorder(Color.BLACK));
outputArea = new JTextArea(10, 20);
outputArea.setBorder(new LineBorder(Color.BLACK));
并使用
JScrollPane
s而不是LineBorder
问题的可能原因是容器区域小于文本区域的首选大小,GridBagLayout
将默认为最小大小
这是一个很好的例子,说明了为什么您应该避免直接设置这些特性,而是使用布局管理器和零部件特性
首先,使用JTextArea
的列
和行
属性。这将更好地“猜测”显示文本所需的空间量,以适应这些限制
其次,使用GridBagConstraints#fill
覆盖GridBagLayout
,并强制其利用可用空间
我也会改变
inputArea = new JTextArea(10, 20);
inputArea.setBorder(new LineBorder(Color.BLACK));
outputArea = new JTextArea(10, 20);
outputArea.setBorder(new LineBorder(Color.BLACK));
并使用
JScrollPane
s而不是LineBorder
这是否回答了您的问题?可能是因为容器的首选尺寸太大,所以它会填充回其最小尺寸。首先,不要直接设置首选尺寸。而是使用行/列属性。其次,使用GridBagConstraints#fill
覆盖这些属性上述注释也适用于面板。不要试图设置面板的首选尺寸。首选尺寸将根据添加到面板的组件计算。另外,请注意,在将组件添加到面板之前调用initSize()
,以便首选大小为(0,0)。摆脱该方法和代码。要更快地获得更好的帮助,请添加或。(该代码至少需要一个main(String[])
方法才能在屏幕上显示为MRE/SSCCE。)编辑:但在将其转换为MRE/SSCCE之前,请注意@MadProgrammer&camickr的建议。我相信他们已经给出了足够的建议来解决这个问题。这能回答你的问题吗?可能是因为容器的首选尺寸太大,所以它会填充回其最小尺寸。首先,不要直接设置首选尺寸。而是使用行/列属性。其次,使用GridBagConstraints#fill
覆盖这些属性上述注释也适用于面板。不要试图设置面板的首选尺寸。首选尺寸将根据添加到面板的组件计算。另外,请注意,在将组件添加到面板之前调用initSize()
,以便首选大小为(0,0)。摆脱该方法和代码。要更快地获得更好的帮助,请添加或。(该代码至少需要一个main(String[])
方法才能在屏幕上显示为MRE/SSCCE。)编辑:但在将其转换为MRE/SSCCE之前,请注意@MadProgrammer&camickr的建议。我相信他们已经给出了足够的建议来解决这个问题。天哪,解决了!能学到新东西真是太好了。到目前为止,我对这些信息一无所知。干杯天哪,解决了!能学到新东西真是太好了。到目前为止,我对这些信息一无所知。干杯