jscrollbar垂直/水平设置问题 - Java秋千
-
09-10-2019 - |
题
我只是想在我的Textfield和Textarea中添加垂直滚动条。我使用的是滚动板,默认情况下应该创建偏见/水平滚动条。
问题:我需要一个垂直滚动条才能查看不可见的数据。在开始时,出现了一个垂直滚动条,但是当数据增加垂直滚动条时,将变化为水平滚动条。文本场也消失了,只有一个水平的卷轴出现在其位置。我想这是因为我如何设置界限,但我尝试更改界限,最终完全消除了Textfield。
我的代码片段:
public JTextField inputField = new JTextField();
public JTextArea talkArea = new JTextArea();
public JScrollPane inputFieldScroll = new JScrollPane(inputField);
public JScrollPane talkAreaScroll = new JScrollPane(talkArea);
talkArea.setEditable(false);
talkArea.setBackground(Color.white);
talkAreaScroll.setBounds(new Rectangle(TALK_LEFT, TALK_TOP, TALK_WIDTH, TALK_HEIGHT));
this.getContentPane().add(talkAreaScroll, null);
//set input area
inputField.setBackground(Color.white);
inputField.setBounds(new Rectangle(INPUT_LEFT, INPUT_TOP, INPUT_WIDTH, INPUT_HEIGHT));
inputFieldScroll.setVerticalScrollBar(new JScrollBar());
inputFieldScroll.setBounds(new Rectangle(INPUT_LEFT, INPUT_TOP, INPUT_WIDTH, INPUT_HEIGHT));
问题:
我是否需要设置一些参数,以使其保持垂直滚动条?当数据变成巨大的线路时,为什么输入滚动条占据整个输入场?在开始时,它看起来像是正确的垂直滚动条。
任何建议都感谢。
谢谢
解决方案
下面是我上面提到的一个小型编译代码段。我同意Camickr的观点,您不应该使用绝对定位,而是使用布局经理。如果您绝对需要为JTEXTFIELD提供水平滚动条,那么使用允许此功能的JSCrollpane构造函数将其工作始终显示。 IE,
JScrollPane inputPane = new JScrollPane(inputField, JScrollPane.VERTICAL_SCROLLBAR_NEVER,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
对于
import java.awt.*;
import javax.swing.*;
public class FuSwing1b extends JPanel {
private static final int TA_ROWS = 25;
private static final int TA_COLS = 60;
private JTextField inputField = new JTextField();
private JTextArea talkArea = new JTextArea(TA_ROWS, TA_COLS);
public FuSwing1b() {
talkArea.setEditable(false);
talkArea.setFocusable(false);
talkArea.setBackground(Color.white);
//talkArea.setPreferredSize(new Dimension(TALK_WIDTH, TALK_HEIGHT));
JScrollPane talkPane = new JScrollPane(talkArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
JScrollPane inputPane = new JScrollPane(inputField, JScrollPane.VERTICAL_SCROLLBAR_NEVER,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
int gap = 10;
setLayout(new BorderLayout(gap, gap));
add(talkPane, BorderLayout.CENTER);
add(inputPane, BorderLayout.SOUTH);
setBorder(BorderFactory.createEmptyBorder(gap , gap, gap, gap));
}
private static void createAndShowUI() {
JFrame frame = new JFrame("FuSwing1b");
frame.getContentPane().add(new FuSwing1b());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}
其他提示
不要玩边界。使用布局管理器,您不必为此担心。
当您创建文本字段时,请使用类似的内容:
JTextField textField = new JTextField(10);
这将创建一个文本字段,该字段将至少包含10个字符。如果字符的数量超过文本字段的显示宽度,则使用右/左箭头键可以看到其余字符。那是我见过的所有应用程序使用的普通UI。不要尝试使用水平滚动栏创建自己的UI。用户不习惯这一点。
对于文本区域,您可以使用:
JTextArea textArea = new JTextArea(5, 30);
JScrollPane scrollPane = new JScrollPane( textArea );
创建一个具有5行和大约30个字符的文本区域。
现在,将文本字段和卷轴添加到“使用布局管理器”的框架中,然后包装框架。布局经理将确定组件的最佳尺寸。当您向其添加文本时,滚动条将自动出现在文本区域上,并且文本超过5行。
不隶属于 StackOverflow