Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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 Swing:JTextArea填充整个分配的空间_Java_Swing - Fatal编程技术网

Java Swing:JTextArea填充整个分配的空间

Java Swing:JTextArea填充整个分配的空间,java,swing,Java,Swing,我有上面的代码,它模拟了应用于GridBagLayout()的黄金比例思想。结果如下: 现在,您可以看到文本区域是空的。 我想它的主机面板基本上是充满了 “白色”空间,即使此时文本区域为空。 我记得在SE这里读到,BorderLayout是一条路, 所以我试过了。 因此,本质上,我希望文本区域填充它的宿主 面板到边缘,滚动窗格也可见 如何做到这一点?上述MWE最相关的代码可能是MyTextPanel类 现在,您可以看到文本区域是空的 这是因为您实际上没有将文本区域添加到滚动窗格中 import

我有上面的代码,它模拟了应用于GridBagLayout()的黄金比例思想。结果如下: 现在,您可以看到文本区域是空的。 我想它的主机面板基本上是充满了 “白色”空间,即使此时文本区域为空。 我记得在SE这里读到,
BorderLayout
是一条路, 所以我试过了。 因此,本质上,我希望文本区域填充它的宿主 面板到边缘,滚动窗格也可见

如何做到这一点?上述MWE最相关的代码可能是MyTextPanel类

现在,您可以看到文本区域是空的

这是因为您实际上没有将文本区域添加到滚动窗格中

import javax.swing.*;
import javax.swing.border.EtchedBorder;
import java.awt.*;

import static java.awt.GridBagConstraints.BOTH;

public class mwe extends JFrame {

    private JPanel x, y, z, u,v,w,jtext;

    private class MyBorderedPanel extends JPanel {
        MyBorderedPanel( String title ) {
            this.setBorder(BorderFactory.createTitledBorder(
                    BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), title
            ));
        }
    }

    private class MyTextPanel extends JPanel {
        JTextArea textArea;
        MyTextPanel( String title ) {
            textArea= new JTextArea();
            this.setBorder(BorderFactory.createTitledBorder(
                            BorderFactory.createEtchedBorder(EtchedBorder.LOWERED),
                            title));
            this.setLayout(new BorderLayout());
            JScrollPane pane= new JScrollPane();
            pane.add(textArea);
            textArea.setLineWrap(true);
            textArea.setWrapStyleWord(true);
            this.add(pane);
        }
    }

    public mwe() {
        x= new MyBorderedPanel("x");
        y= new MyBorderedPanel("y");
        z= new MyBorderedPanel("z");
        u= new MyBorderedPanel("u");
        v= new MyBorderedPanel("v");
        w= new MyBorderedPanel("w");
        jtext= new MyTextPanel("textArea");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        manageLayout();
    }

    private void manageLayout() {
        this.setLayout(new GridBagLayout());
        GridBagConstraints constraints = new GridBagConstraints();
        constraints.fill = BOTH;

        constraints.gridx = 0;
        constraints.gridy = 0;
        constraints.weightx = constraints.weighty = 13.00;
        constraints.gridwidth = 1;
        constraints.gridheight = 4;
        this.add(x, constraints);

        constraints.gridx = 1;
        constraints.gridy = 0;
        constraints.weightx = constraints.weighty = 8.00;
        constraints.gridwidth = 3;
        constraints.gridheight = 1;
        this.add(y, constraints);


        { //adding dummes: 2x2, 1x1, 1x1
            constraints.gridx = 1;
            constraints.gridy = 1;
            constraints.weightx = constraints.weighty = 2.00;
            constraints.gridwidth = 1;
            constraints.gridheight = 2;
            this.add(u, constraints);

            constraints.gridx = 2;
            constraints.gridy = 1;
            constraints.weightx = constraints.weighty = 1.00;
            constraints.gridwidth = 1;
            constraints.gridheight = 1;
            this.add(v, constraints);

            constraints.gridx = 2;
            constraints.gridy = 2;
            constraints.weightx = constraints.weighty = 1.00;
            constraints.gridwidth = 1;
            constraints.gridheight = 1;
            this.add(v, constraints);
        }

        constraints.gridx = 3;
        constraints.gridy = 1;
        constraints.weightx = constraints.weighty = 5.00;
        constraints.gridwidth = 1;
        constraints.gridheight = 3;
        this.add(jtext, constraints);


        constraints.gridx = 1;
        constraints.gridy = 3;
        constraints.weightx = constraints.weighty = 3.00;
        constraints.gridwidth = 2;
        constraints.gridheight = 1;
        this.add(z, constraints);
    }
    public static void main( String ... args ) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame= null;
                frame = new mwe();
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}
上面的代码是错误的。您不能将组件直接“添加”到JScrollPane

而是将组件添加到
JScrollPane
JViewport

这可以通过执行以下任一操作来实现:

JScrollPane pane= new JScrollPane();
pane.add(textArea);
将文本区域添加到视口,或

JScrollPane pane= new JScrollPane(textArea);
现在,您可以看到文本区域是空的

这是因为您实际上没有将文本区域添加到滚动窗格中

import javax.swing.*;
import javax.swing.border.EtchedBorder;
import java.awt.*;

import static java.awt.GridBagConstraints.BOTH;

public class mwe extends JFrame {

    private JPanel x, y, z, u,v,w,jtext;

    private class MyBorderedPanel extends JPanel {
        MyBorderedPanel( String title ) {
            this.setBorder(BorderFactory.createTitledBorder(
                    BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), title
            ));
        }
    }

    private class MyTextPanel extends JPanel {
        JTextArea textArea;
        MyTextPanel( String title ) {
            textArea= new JTextArea();
            this.setBorder(BorderFactory.createTitledBorder(
                            BorderFactory.createEtchedBorder(EtchedBorder.LOWERED),
                            title));
            this.setLayout(new BorderLayout());
            JScrollPane pane= new JScrollPane();
            pane.add(textArea);
            textArea.setLineWrap(true);
            textArea.setWrapStyleWord(true);
            this.add(pane);
        }
    }

    public mwe() {
        x= new MyBorderedPanel("x");
        y= new MyBorderedPanel("y");
        z= new MyBorderedPanel("z");
        u= new MyBorderedPanel("u");
        v= new MyBorderedPanel("v");
        w= new MyBorderedPanel("w");
        jtext= new MyTextPanel("textArea");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        manageLayout();
    }

    private void manageLayout() {
        this.setLayout(new GridBagLayout());
        GridBagConstraints constraints = new GridBagConstraints();
        constraints.fill = BOTH;

        constraints.gridx = 0;
        constraints.gridy = 0;
        constraints.weightx = constraints.weighty = 13.00;
        constraints.gridwidth = 1;
        constraints.gridheight = 4;
        this.add(x, constraints);

        constraints.gridx = 1;
        constraints.gridy = 0;
        constraints.weightx = constraints.weighty = 8.00;
        constraints.gridwidth = 3;
        constraints.gridheight = 1;
        this.add(y, constraints);


        { //adding dummes: 2x2, 1x1, 1x1
            constraints.gridx = 1;
            constraints.gridy = 1;
            constraints.weightx = constraints.weighty = 2.00;
            constraints.gridwidth = 1;
            constraints.gridheight = 2;
            this.add(u, constraints);

            constraints.gridx = 2;
            constraints.gridy = 1;
            constraints.weightx = constraints.weighty = 1.00;
            constraints.gridwidth = 1;
            constraints.gridheight = 1;
            this.add(v, constraints);

            constraints.gridx = 2;
            constraints.gridy = 2;
            constraints.weightx = constraints.weighty = 1.00;
            constraints.gridwidth = 1;
            constraints.gridheight = 1;
            this.add(v, constraints);
        }

        constraints.gridx = 3;
        constraints.gridy = 1;
        constraints.weightx = constraints.weighty = 5.00;
        constraints.gridwidth = 1;
        constraints.gridheight = 3;
        this.add(jtext, constraints);


        constraints.gridx = 1;
        constraints.gridy = 3;
        constraints.weightx = constraints.weighty = 3.00;
        constraints.gridwidth = 2;
        constraints.gridheight = 1;
        this.add(z, constraints);
    }
    public static void main( String ... args ) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame= null;
                frame = new mwe();
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}
上面的代码是错误的。您不能将组件直接“添加”到JScrollPane

而是将组件添加到
JScrollPane
JViewport

这可以通过执行以下任一操作来实现:

JScrollPane pane= new JScrollPane();
pane.add(textArea);
将文本区域添加到视口,或

JScrollPane pane= new JScrollPane(textArea);