Java JFrame添加滚动条
我已经尝试了一些教程,并查看了其他答案,但它似乎仍然对我没有帮助,我想在这个控制台上添加一个滚动条,比如JTextArea,并保留每一行新文本都会将其余文本向上推的属性 这就是它当前的样子: 以及守则: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")
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())
intokeyPressed
方法如果你想在每次键入消息后将文本的位置设置为底部,那么对于文本组件来说,最糟糕的选择就是使用ActionListener。我在几秒钟内制作了一个ActionListener,向他展示了如何实现他想要的……我没有真正考虑最好的可能性是什么其中大部分是Eclipse生成的代码;)