Jscrollbar Вертикальная / Горизонтальная настройка Проблема - Java Swing
-
09-10-2019 - |
Вопрос
Я просто пытаюсь добавить вертикальную полосу прокрутки до моего текстового поля и Textarea. Я использую Scrollpane, и он должен создать драйверов / горизонтальную полосу прокрутки по умолчанию.
Проблема: Мне нужна вертикальная полоса прокрутки, чтобы увидеть данные, которые не видны. В начале появляется вертикальная прокрутка, но когда данные увеличивают вертикальную прокрутку изменений в горизонтальную полосу прокрутки. Также текстовое поле исчезает, и на его месте появляется только горизонтальная прокрутка. Я думаю, это потому, что, как я установил границы, но я пытался изменить границы, и она в конечном итоге полностью потягивается с текстовым полем.
Мой кодовый фрагмент:
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, который позволяет этому. т.е.
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 символов. Если количество символов превышает ширину отображения текстового поля, используемое можно увидеть оставшиеся символы с помощью клавиш правой / левой стрелки. Это нормальный пользовательский интерфейс, используемый всеми приложениями, которые я когда-либо видел. Не пытайтесь создать свой собственный интерфейс, используя горизонтальную прокрутку. Пользователи не привыкли к этому.
Для текстовой области вы можете создать его, используя:
JTextArea textArea = new JTextArea(5, 30);
JScrollPane scrollPane = new JScrollPane( textArea );
Чтобы создать текстовую область с 5 строками и примерно 30 символов на строку.
Теперь добавьте текстовое поле и ScrollPane в свой кадр «Использование менеджеров макета», а затем упаковывайте кадр. Менеджеры макета определит лучший размер для компоновцев. Scrollbars автоматически появятся в области текста, когда вы добавляете текст к нему, и текст превышает 5 строк.