Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.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 JScrollPane与JTextArea的行为不正常_Java_Swing_Jscrollpane_Jtextfield - Fatal编程技术网

Java JScrollPane与JTextArea的行为不正常

Java JScrollPane与JTextArea的行为不正常,java,swing,jscrollpane,jtextfield,Java,Swing,Jscrollpane,Jtextfield,我之前问过,如何让JTextField从下面插入文本。现在我在代码上遇到了一些问题。我编辑了一点,只是为了测试。下面是我现在使用的代码: public class BaseTextAreaDemo { private static JTextArea textArea; public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override p

我之前问过,如何让JTextField从下面插入文本。现在我在代码上遇到了一些问题。我编辑了一点,只是为了测试。下面是我现在使用的代码:

public class BaseTextAreaDemo {

private static JTextArea textArea;

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
            }

            final JFrame frame = new JFrame("Base JTextArea App");
            final JPanel panel = new JPanel();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new BorderLayout());
            panel.setLayout(new BorderLayout());
            JPanel textAreaPanel = getBaseTextArea();
            JScrollPane scrollPane = new JScrollPane(textAreaPanel)  {
                public Dimension getPreferredSize() {
                    return new Dimension(300, 230);
                }
            };

            panel.add(scrollPane, BorderLayout.SOUTH);
            JTextField textField = new JTextField();
            textField.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent arg0) {
                    textArea.append(arg0.getActionCommand() + "\n");

                }

            });
            frame.add(panel, BorderLayout.CENTER);
            frame.add(textField, BorderLayout.SOUTH);
            frame.pack();
            frame.setLocationByPlatform(true);
            frame.setVisible(true);
        }

        private JPanel getBaseTextArea() {
            textArea = new JTextArea();
            textArea.setLineWrap(true);
            textArea.setWrapStyleWord(true);
            textArea.append("bla bla bla\n");
            textArea.append("new text here");
            JPanel panel = new JPanel(new BorderLayout());
            panel.setBackground(textArea.getBackground());
            panel.setBorder(textArea.getBorder());
            textArea.setBorder(null);
            panel.add(textArea, BorderLayout.SOUTH);

            return panel;
        }

    });

}
我刚刚添加了一个文本字段,因为我还需要在程序中添加一个文本字段,这样添加更多行很有用

现在的问题是,当我运行这个程序并添加行直到出现一个垂直滚动条时,也会出现一个水平滚动条。我已经想好了,你可以把它关掉,但是有些文字会从屏幕上掉下来。此外,当您将框架加宽,然后将其恢复为正常大小时,水平滚动条将保持加宽窗口的大小


另一个问题是JTextField中的滚动速度非常低。

尝试将textArea的首选大小设置为与我们的JScrollPane相同:

textArea.setPreferedSize(Dimension(300, 230));
您也可以禁用水平滚动条:

scrollPane.setHorizonalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
您可以如下设置滚动速度:

scrollPane.getVerticalScrollBar().setUnitIncrement(16);
我可以解决这个问题:它是u添加到滚动窗格的面板。将JTextArea直接添加到滚动窗格中,水平栏仅在需要时显示:

textArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(textArea);

如果您想完全删除水平滚动条,那么我建议您在
JScrollPane
上调用这行代码:


scrollPane.setHorizonalScrollBarPolicy(JScrollPane.HORIZONTAL\u SCROLLBAR\u NEVER)

我不想禁用水平滚动条,因为这样文本就会从屏幕上消失。textfield仍将大于显示的区域。@CaspervanBattum然后将textfield设置为一个恒定的维度值。