Leider ist es nicht das, was passiert. Wenn Sie die Implementierung der Textkomponente in JTextField ändern, bleibt die Position der Bildlaufleiste gleich.
Code: Select all
package demos.text.field;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.text.JTextComponent;
import java.awt.BorderLayout;
import java.awt.Component;
public class TextComponentDemo {
// static JTextComponent textComponent = new JTextField(); // keeps the scroll bar in place
static JTextComponent textComponent = new JTextPane(); // fiddles with the scroll bar
public static void main(String[] args) {
JScrollPane scroller = createScroller();
JFrame frame = new JFrame("Text field demo");
frame.setContentPane(scroller);
frame.setLocationRelativeTo(null);
frame.setSize(200, 75); // to keep the text component hidden
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private static JScrollPane createScroller() {
Component mainPanel = createMainPanel();
JScrollPane scrollPane = new JScrollPane(mainPanel);
return scrollPane;
}
private static JPanel createMainPanel() {
JPanel panel = new JPanel(new BorderLayout());
panel.add(createButtonPanel());
panel.add(textComponent, BorderLayout.SOUTH);
return panel;
}
private static JPanel createButtonPanel() {
JPanel panel = new JPanel();
panel.add(createInsertButton());
panel.add(createClearButton());
return panel;
}
private static JButton createInsertButton() {
JButton button = new JButton("Insert");
button.addActionListener(e -> textComponent.setText("Sample text"));
return button;
}
private static JButton createClearButton() {
JButton button = new JButton("Clear");
button.addActionListener(e -> textComponent.setText(null));
return button;
}
}