Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么这个区域很小?_Java_Swing_Layout Manager_Jtextarea - Fatal编程技术网

Java 为什么这个区域很小?

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

我尝试在SWING中制作一个简单的应用程序:使用JFrame上的BorderLayout布局,我在南部放置一个执行按钮,在西部放置一个包含组合框的面板,在东部放置一个包含2个JTextAreas的面板。问题是,这两个区域都非常小。欢迎提供任何帮助和解释

这是带有两个文本区域的面板代码

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的建议。我相信他们已经给出了足够的建议来解决这个问题。天哪,解决了!能学到新东西真是太好了。到目前为止,我对这些信息一无所知。干杯天哪,解决了!能学到新东西真是太好了。到目前为止,我对这些信息一无所知。干杯