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. 矢印キーを使用したAngular2ナビゲーション
- 2. JScrollPaneには、矢印
- 3. マウスホイールと矢印キーで `wx.ScrolledPanel`をスクロール
- 4. JComboBoxのヌルIn矢印キーの使用
- 5. JQuery:キーボードのナビゲーション、矢印キーを使用したリンクのトリガー
- 6. 上下矢印キーを使用したトラバース - 処理ボタンのFocusOut
- 7. C#と矢印キー
- 8. Jscrollpaneの最後でスクロールするときに上下矢印キーを非表示にする方法
- 9. ie8フラッシュで矢印を使用してスクロールする
- 10. 矢印キーを使用してBXSLIDERを制御する
- 11. 矢印キーを使用してテキストビューをナビゲートする
- 12. 矢印キーを使用してコンソール内をナビゲートする
- 13. フラッシュの矢印キーでスクロールを無効にする
- 14. 矢印キーを使用して移動する
- 15. JavaFX:矢印キーによるスクロール対フォーカスのトラバーサル
- 16. Autohotkey:矢印キーの再マップ
- 17. のVim - キー右矢印
- 18. OS Xの矢印キー
- 19. Javascript:Keydownイベント:矢印キーのキーダウンイベントを防ぐ「上向き」矢印キー? (回答:キーボードゴースト)
- 20. WM_IME_KEYDOWNが矢印キーをキャプチャしない
- 21. HTML5 Canvas:EaselJSの矢印キーを使用した移動/パンニングの世界
- 22. Delphi XEとトラップ矢印キー(OnKeyDownを使用)
- 23. JQuery UIのオートコンプリート機能がFirefoxの矢印キーでスクロールしない
- 24. 左矢印と右矢印を使用してフォーカスを設定する(HTML + JS)
- 25. 矢印キーでフォームフィールドをナビゲートする
- 26. LinuxまたはSolarisではCキーを使用して矢印キーを検出する方法は?
- 27. 矢印キーを使用せずにvimファジーファインダでファイルを選択しますか?
- 28. JavaScriptアニメーションを使用して矢印キーで長方形を移動する
- 29. ajax提案テキストボックスの矢印キーを使用してデータを選択
- 30. Jquery - リストのフォーカスにある矢印キーでウィンドウのスクロールを無効にする
私はあなたが答えを受け入れたことは知っていますが、必ずしもカスタムコードを書く必要はありません。私の新しく追加された提案をチェックしてください。 – camickr
ええ、両方の答えからの知識を組み合わせることで、この種の問題はうまく解決できます。残念ながら、複数の回答を受け入れることはできません; – JooMing