【发布时间】:2014-08-03 14:25:48
【问题描述】:
我遇到了 JScrollPane 的自动滚动问题。例如,在下面的代码中,如果我们改变 Spinner 的值,所有 TextAreas 的值都会被改变。然后 JScrollPane 自动滚动到最新更改的 JComponent。
我可以阻止这种自动滚动吗?
有人指出这个问题是“重复的”,但根本不是。这个问题Java / Swing : JTextArea in a JScrollPane, how to prevent auto-scroll?是一个JScrollPane中的JTextArea,所以我们可以使用DefaultCaret来解决这个问题,因为JTextArea有DefaultCaret。但在我的问题中,它是 JScrollPane 中的 JPanel,而 JPanel 没有 DefaultCaret。所以我们不能用同样的方法来解决这个问题。
import java.awt.BorderLayout
import javafx.scene.layout.Pane;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTextArea;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class ScrollControl {
static JFrame main_frame = new JFrame();
static JScrollPane scroll_pane = new JScrollPane();
static JPanel pane = new JPanel();
static JSpinner spinner = new JSpinner();
static JTextArea text1 = new JTextArea();
static JTextArea text2 = new JTextArea();
static JTextArea text3 = new JTextArea();
static JTextArea text4 = new JTextArea();
static JTextArea text5 = new JTextArea();
static JTextArea text6 = new JTextArea();
static JTextArea text7 = new JTextArea();
public static void main(String args[]){
main_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
spinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent arg0) {
text1.setText(spinner.getValue().toString());
text2.setText(spinner.getValue().toString());
text3.setText(spinner.getValue().toString());
text4.setText(spinner.getValue().toString());
text5.setText(spinner.getValue().toString());
text6.setText(spinner.getValue().toString());
text7.setText(spinner.getValue().toString());
}
});
pane.add(spinner);
pane.add(text1);
pane.add(text2);
pane.add(text3);
pane.add(text4);
pane.add(text5);
pane.add(text6);
pane.add(text7);
scroll_pane = new JScrollPane(pane);
main_frame.setSize(300, 100);
main_frame.getContentPane().add(scroll_pane, BorderLayout.CENTER);
main_frame.setVisible(true);
}
}
【问题讨论】:
-
@DavidPostill 一点也不,那是 JScrollPane 中的 JTextArea。 JTextArea 有一个“getCaret()”。但是 JPanel 有不一样的东西。
标签: java swing jscrollpane