2

aJTableに aを追加JPanelし、それをJPanelaに追加すると、それがフォーカス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();
        }
    });
}
}
4

5 に答える 5

1

誰かが気にかけている場合に備えて、問題は、アプリの Eclipse ランチャーと JNLP ランチャーに別の KeyboardFocusManager があり、JNLP ランチャーにはいくつかの癖があったことです。

カスタムの KeyboardFocusManager が JLNP 側に追加されていることは知りませんでしたが、少なくとも説明はあります。

みんな、ありがとう。

于 2012-02-10T22:02:50.453 に答える
0

さて、この問題を回避するために、オブジェクトをスクロール ペインに追加する方法を作り直す必要がありました。具体的には、テーブルがビューポートの高さよりも高くなる場合は、テーブルをスクロールペインに直接追加してから、中間パネルの使用方法を変更するだけです。

ご意見をお寄せいただきありがとうございます。

于 2011-12-02T17:58:13.197 に答える
0

JTables を JScrollPane のビューポートとして直接配置するのではなく、中間の JPanel に配置すると、JTables で自動スクロールの問題が発生しました。そのような場合、不要なパネルを削除してテーブルをスクロールペインに直接配置すると、問題が解決しました。

于 2011-11-30T20:55:51.647 に答える
-1

thisによると、選択をJTable変更するには、選択モデルを変更する必要があります。以下を使用して、選択したアイテムを最初のアイテムに設定してみてください。

ListSelectionModel selectionModel = table.getSelectionModel();
selectionModel.setSelectionInterval(start, end);

JTableそれが?の上部にフォーカスを与えるかどうかを確認してください。

編集: 私は前にこれをやったことがないので、どの開始と終了が必要になるかわからないので、0,0 または 0,1 を試してみてください。

于 2011-11-30T02:14:59.823 に答える