JScrollPane内にJTextAreaコンポーネントがあり、テキストエリアは編集できません。上下の矢印キーでテキスト領域をスクロールすることができます(つまり、矢印キーを押すとテキスト領域が1行スクロールします)。どのようにこれを達成するための任意のアイデアですか?JScrollPane矢印キーを使用したスクロール
答えて
はいキーバインドがありますが、必ずしも独自のアクションを作成する必要はありません。スイングコンポーネントには、頻繁に再利用できるデフォルトのアクションが付属しています。
これらのアクションの完全な一覧については、Key Bindingsを参照してください。
今、あなたはあなただけのキーストロークにバインドすることができますアクションの名前を知っている:
JScrollBar vertical = scrollPane.getVerticalScrollBar();
InputMap im = vertical.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
im.put(KeyStroke.getKeyStroke("DOWN"), "positiveUnitIncrement");
im.put(KeyStroke.getKeyStroke("UP"), "negativeUnitIncrement");
本当に有益な情報に感謝します。 –
このキーバインディングのリンクは非常に便利です!既存のアクションを再利用すると、維持する。 – JooMing
JScrollPaneにKeyListenerを追加する必要があります。
このタイプの状況では、キーリスナーよりもキーバインディングを使用するほうが常に良いです。 –
JTextAreaが編集不可でフォーカス不可能な場合、矢印キーに応答しません。これを回避するための正式な方法があるかどうかはわかりませんが、それに対応させる方法の1つは、JTextAreaがフォーカス可能なウィンドウ内にあるときに、上下のキーに対応するキーバインドを設定することです。これの例は次のとおりです。
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.*;
import javax.swing.text.JTextComponent;
@SuppressWarnings("serial")
public class TestScrollingArea extends JPanel {
private static final String UP = "Up";
private static final String DOWN = "Down";
private JTextArea area = new JTextArea(20, 40);
private JScrollPane scrollPane = new JScrollPane(area);
public TestScrollingArea() {
// make textarea non-editable and non-focusable
area.setEditable(false);
area.setFocusable(false);
area.setWrapStyleWord(true);
area.setLineWrap(true);
add(scrollPane);
// fill area with letters
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 100; j++) {
area.append("abcdefg ");
}
}
// have JTextArea tell us how tall a line of text is.
int scrollableIncrement = area.getScrollableUnitIncrement(scrollPane.getVisibleRect(),
SwingConstants.VERTICAL, 1);
// add key bindings to the JTextArea
int condition = JTextComponent.WHEN_IN_FOCUSED_WINDOW;
InputMap inMap = area.getInputMap(condition);
ActionMap actMap = area.getActionMap();
inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), UP);
inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), DOWN);
actMap.put(UP, new UpDownAction(UP, scrollPane.getVerticalScrollBar().getModel(),
scrollableIncrement));
actMap.put(DOWN, new UpDownAction(DOWN, scrollPane.getVerticalScrollBar().getModel(),
scrollableIncrement));
}
// Action for our key binding to perform when bound event occurs
private class UpDownAction extends AbstractAction {
private BoundedRangeModel vScrollBarModel;
private int scrollableIncrement;
public UpDownAction(String name, BoundedRangeModel model, int scrollableIncrement) {
super(name);
this.vScrollBarModel = model;
this.scrollableIncrement = scrollableIncrement;
}
@Override
public void actionPerformed(ActionEvent ae) {
String name = getValue(AbstractAction.NAME).toString();
int value = vScrollBarModel.getValue();
if (name.equals(UP)) {
value -= scrollableIncrement;
vScrollBarModel.setValue(value);
} else if (name.equals(DOWN)) {
value += scrollableIncrement;
vScrollBarModel.setValue(value);
}
}
}
private static void createAndShowUI() {
JFrame frame = new JFrame("TestScrollingArea");
frame.getContentPane().add(new TestScrollingArea());
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();
}
});
}
}
はちょうどこの問題に出くわしたと回答は、右方向への溶液のいくつかのビットを私を駆動するのに有用であった一方、それ以来変更されている可能性があります。 - それは変更する必要のあるJScrollPaneインスタンスのInputMapでした - actionMapKeysは、 "unitScrollX"および/または "scrollX"(X = Down、Up、Left、Right)でなければなりませんでした。 。それらはBasicScrollPaneUIにあります。
- 1. JScrollPaneには、矢印
- 2. 矢印キーを使用したAngular2ナビゲーション
- 3. マウスホイールと矢印キーで `wx.ScrolledPanel`をスクロール
- 4. 矢印キーを押したときのページコンテンツのスクロール
- 5. JComboBoxのヌルIn矢印キーの使用
- 6. JQuery:キーボードのナビゲーション、矢印キーを使用したリンクのトリガー
- 7. jQueryの矢印キーを使用したオーディオスライダー
- 8. 上下矢印キーを使用したトラバース - 処理ボタンのFocusOut
- 9. アングルでキーアップを使用して矢印キーを使用する
- 10. Eclipseの右矢印キーと左矢印キーを使用してツリーノードを展開します。
- 11. Jscrollpaneの最後でスクロールするときに上下矢印キーを非表示にする方法
- 12. カルーセルの矢印キーのスクロールが機能しない
- 13. C#と矢印キー
- 14. ページネーション(右矢印キー)
- 15. 矢印キーでナビゲートサムネイルギャラリー
- 16. 矢印キーのユニコード?
- 17. SpriteKitの矢印キー
- 18. AIX - デフォルトシェル - 矢印キー
- 19. ie8フラッシュで矢印を使用してスクロールする
- 20. Ext js6.2、矢印キーを使用してテキストフィールドをナビゲート
- 21. iOS矢印キーを使用してTableViewをナビゲート
- 22. 矢印キーを使用してテキストビューをナビゲートする
- 23. 矢印キーを使用してBXSLIDERを制御する
- 24. 矢印キーを使用して円を移動する - Java
- 25. PyQT5矢印キーを使用してリストボックス間でフォーカスを移動
- 26. 矢印キーを使用してコンソール内をナビゲートする
- 27. フラッシュの矢印キーでスクロールを無効にする
- 28. 矢印キーを使用していないKeyListener
- 29. 矢印キーを使用しない自動提案ドロップダウン
- 30. 矢印キーを使用して移動する
私はあなたが答えを受け入れたことは知っていますが、必ずしもカスタムコードを書く必要はありません。私の新しく追加された提案をチェックしてください。 – camickr
ええ、両方の答えからの知識を組み合わせることで、この種の問題はうまく解決できます。残念ながら、複数の回答を受け入れることはできません; – JooMing