Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.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 JFrame添加滚动条_Java_Swing_Jframe_Jscrollpane_Jtextarea - Fatal编程技术网

Java JFrame添加滚动条

Java JFrame添加滚动条,java,swing,jframe,jscrollpane,jtextarea,Java,Swing,Jframe,Jscrollpane,Jtextarea,我已经尝试了一些教程,并查看了其他答案,但它似乎仍然对我没有帮助,我想在这个控制台上添加一个滚动条,比如JTextArea,并保留每一行新文本都会将其余文本向上推的属性 这就是它当前的样子: 以及守则: Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); int width = 600; int height = 400; JFrame frame = new JFrame("ChanDown")

我已经尝试了一些教程,并查看了其他答案,但它似乎仍然对我没有帮助,我想在这个控制台上添加一个滚动条,比如JTextArea,并保留每一行新文本都会将其余文本向上推的属性

这就是它当前的样子:

以及守则:

Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();

    int width = 600;
    int height = 400;

    JFrame frame = new JFrame("ChanDown");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel = new JPanel(new BorderLayout());
    JTextField textField = new JTextField();
    textField.setHorizontalAlignment(JTextField.LEFT) ;



    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(width, height);
    frame.setResizable(false);

    JTextArea console = new JTextArea();
    console.setBackground(Color.DARK_GRAY);
    console.setForeground(Color.white);
    console.setMargin(new Insets(0,10,10,10));
    console.setLineWrap(true);

    panel.add(console, BorderLayout.NORTH);

    panel.add(textField, BorderLayout.CENTER);
    frame.add(panel, BorderLayout.SOUTH);

    frame.getContentPane().setBackground(Color.DARK_GRAY);

    frame.setVisible(true);

JTextArea
添加到
JScrollPane

panel.add(new JScrollPane(console), BorderLayout.NORTH);

有关更多详细信息,请参见

import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.border.EmptyBorder;

@SuppressWarnings("serial")
public class ChanDown extends JFrame {

    private JPanel contentPane;
    private JTextField textField;
    private JTextArea textArea;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ChanDown frame = new ChanDown();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public ChanDown() {
        setForeground(Color.WHITE);
        setBackground(Color.DARK_GRAY);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 381);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);

        JScrollPane scrollPane = new JScrollPane();

        textField = new JTextField();
        textField.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == 10) {
                    textArea.append(textField.getText() + "\n");
                    textField.setText("");
                    textField.requestFocus();
                }
            }
        });
        textField.setColumns(10);
        GroupLayout gl_contentPane = new GroupLayout(contentPane);
        gl_contentPane.setHorizontalGroup(
            gl_contentPane.createParallelGroup(Alignment.LEADING)
                .addComponent(scrollPane, GroupLayout.DEFAULT_SIZE, 424, Short.MAX_VALUE)
                .addComponent(textField, GroupLayout.DEFAULT_SIZE, 424, Short.MAX_VALUE)
        );
        gl_contentPane.setVerticalGroup(
            gl_contentPane.createParallelGroup(Alignment.TRAILING)
                .addGroup(gl_contentPane.createSequentialGroup()
                    .addComponent(scrollPane, GroupLayout.DEFAULT_SIZE, 226, Short.MAX_VALUE)
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(textField, GroupLayout.PREFERRED_SIZE, 20, GroupLayout.PREFERRED_SIZE))
        );

        textArea = new JTextArea();
        textArea.setBackground(Color.DARK_GRAY);
        textArea.setForeground(Color.WHITE);
        textArea.setAlignmentY(Component.BOTTOM_ALIGNMENT);
        textArea.setEditable(false);
        scrollPane.setViewportView(textArea);
        contentPane.setLayout(gl_contentPane);
    }
}

关掉包装线…@为什么?我想要做的东西需要换行。很抱歉,我想水平滚动:使用组布局。。。使用JScrollPane…我试过了,并注释掉了当前的panel.add(控制台…),但这种情况发生了:尝试为文本区域指定行/列。您可以添加
textArea.setCaretPosition(textArea.getSelectionEnd())
into
keyPressed
方法如果你想在每次键入消息后将文本的位置设置为底部,那么对于文本组件来说,最糟糕的选择就是使用ActionListener。我在几秒钟内制作了一个ActionListener,向他展示了如何实现他想要的……我没有真正考虑最好的可能性是什么其中大部分是Eclipse生成的代码;)