Если я добавлю JTable
к JPanel
, а затем добавлю JPanel
к JScrollPane
, всякий раз, когда JTable
получает фокус, панель прокрутки автоматически прокручивается до самого дна, что плохо.
У меня есть много причин сделать это, поэтому я надеюсь, что какое-то решение остановит эту автопрокрутку.
О, а вот и кикер ... Кажется, что это происходит только при запуске приложения через JNLP/WebStart
, и оно НЕ делает этого в Eclipse, что еще более расстраивает.
Вот краткий пример того, что если вы запускаете через JLNP
, щелкните текстовое поле, щелкните таблицу, а затем она автоматически прокрутится вниз:
import java.awt.*;
import javax.swing.*;
public class ScrollDemo extends JPanel{
private static final long serialVersionUID = 1L;
public ScrollDemo()
{
this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
JTable table = new JTable(100,6);
this.add(new JTextField());
JPanel panel = new JPanel();
panel.add(table);
JScrollPane scroll = new JScrollPane(panel);
this.add(scroll);
}
/**
* Create the GUI and show it. For thread safety, this method should be
* invoked from the event-dispatching thread.
*/
private static void createAndShowGUI() {
// Create and set up the window.
JFrame frame = new JFrame("ScrollDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Create and set up the content pane.
JComponent newContentPane = new ScrollDemo();
newContentPane.setOpaque(true); // content panes must be opaque
frame.setContentPane(newContentPane);
frame.setPreferredSize(new Dimension(500, 500));
// Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
// Schedule a job for the event-dispatching thread:
// creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}