Java 如何在swing中的JTextArea中切换线路

Java 如何在swing中的JTextArea中切换线路,java,swing,jtextarea,Java,Swing,Jtextarea,我正在尝试设置我的swing应用程序中用于在两行之间切换的转到行号。我使用getLineCount()获得了JTextArea实例中的行数,但不知道如何在行之间切换 有人能给我提个建议吗?一种方法是以以下方式设置while语句: String line = null; while ((line = text.readLine())!=null && line.getLineNumber() < desiredNumber) {} 字符串行=null; 而((line=te

我正在尝试设置我的swing应用程序中用于在两行之间切换的转到行号。我使用
getLineCount()
获得了
JTextArea
实例中的行数,但不知道如何在行之间切换


有人能给我提个建议吗?

一种方法是以以下方式设置while语句:

String line = null;
while ((line = text.readLine())!=null && line.getLineNumber() < desiredNumber) {}
字符串行=null;
而((line=text.readLine())!=null&&line.getLineNumber()

最后,行将引用具有所需行号的行。

一种方法是以以下方式设置while语句:

String line = null;
while ((line = text.readLine())!=null && line.getLineNumber() < desiredNumber) {}
字符串行=null;
而((line=text.readLine())!=null&&line.getLineNumber()

最后,行将引用具有所需行号的行。

一种方法是以以下方式设置while语句:

String line = null;
while ((line = text.readLine())!=null && line.getLineNumber() < desiredNumber) {}
字符串行=null;
而((line=text.readLine())!=null&&line.getLineNumber()

最后,行将引用具有所需行号的行。

一种方法是以以下方式设置while语句:

String line = null;
while ((line = text.readLine())!=null && line.getLineNumber() < desiredNumber) {}
字符串行=null;
而((line=text.readLine())!=null&&line.getLineNumber()

最后,行将引用具有所需行号的行。

您可以使用
textArea.setCaretPosition
设置插入符号位置。像这样的东西会有用的

textArea.setCaretPosition(textArea.getDocument().getDefaultRootElement()
                         .getElement(index).getStartOffset());
在下面的示例中,我只使用一个
JComboBox
,我使用
JTextArea
的行号填充索引。当您在组合框中选择一个数字时,插入符号将移动到
JTextArea
的该行

但这个节目不是一个伟大的节目。您可能希望通过添加和删除行动态填充
ComboBoxModel
。但这应该会给你你想要的答案

免责声明

我没有添加任何功能来将滚动窗格的焦点移到当前行。你可能想看看下面的@Balder评论来获得帮助

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class TestCaret {

    public TestCaret() {
        JTextArea textArea = createTextArea();
        JComboBox cBox = createComboBox(textArea);

        JFrame frame = new JFrame();
        frame.add(new JScrollPane(textArea));
        frame.add(cBox, BorderLayout.SOUTH);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private JComboBox createComboBox(final JTextArea textArea) {
        DefaultComboBoxModel<Integer> model  = new DefaultComboBoxModel<>();
        int lines = textArea.getLineCount();
        for (int i = 0; i < lines; i++) {
            model.addElement(i);
        }
        final JComboBox cBox = new JComboBox(model);
        cBox.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                int index = (Integer)cBox.getSelectedItem();
                textArea.setCaretPosition(
                        textArea.getDocument().getDefaultRootElement().getElement(index).getStartOffset());
                textArea.requestFocusInWindow();
            }
        });
        return cBox;
    }

    private JTextArea createTextArea() {
        JTextArea textArea = new JTextArea(10, 50);
        textArea.setMargin(new Insets(15, 15, 15, 15));
        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);
        String text 
                = "0 Hello World\n" + 
                "1 Hello World\n" + 
                "2 Hello World\n" + 
                "3 Hello World\n" + 
                "4 Hello World\n" + 
                "5 Hello World\n" + 
                "6 Hello World\n" +
                "7 Hello World\n" + 
                "8 Hello World\n" + 
                "9 Hello World\n"; 
        textArea.setText(text);
        return textArea;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                new TestCaret();
            }
        });
    }
}

import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
公共类TestCaret{
公共测试插入符号(){
JTextArea textArea=createTextArea();
JComboBox cBox=createComboBox(textArea);
JFrame=新JFrame();
frame.add(新的JScrollPane(textArea));
添加框架(cBox,BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
专用JComboBox createComboBox(最终JTextArea textArea){
DefaultComboxModel=新的DefaultComboxModel();
int lines=textArea.getLineCount();
对于(int i=0;i
您可以使用
textArea.setCaretPosition
设置插入符号位置。像这样的东西会有用的

textArea.setCaretPosition(textArea.getDocument().getDefaultRootElement()
                         .getElement(index).getStartOffset());
在下面的示例中,我只使用一个
JComboBox
,我使用
JTextArea
的行号填充索引。当您在组合框中选择一个数字时,插入符号将移动到
JTextArea
的该行

但这个节目不是一个伟大的节目。您可能希望通过添加和删除行动态填充
ComboBoxModel
。但这应该会给你你想要的答案

免责声明

我没有添加任何功能来将滚动窗格的焦点移到当前行。你可能想看看下面的@Balder评论来获得帮助

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class TestCaret {

    public TestCaret() {
        JTextArea textArea = createTextArea();
        JComboBox cBox = createComboBox(textArea);

        JFrame frame = new JFrame();
        frame.add(new JScrollPane(textArea));
        frame.add(cBox, BorderLayout.SOUTH);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private JComboBox createComboBox(final JTextArea textArea) {
        DefaultComboBoxModel<Integer> model  = new DefaultComboBoxModel<>();
        int lines = textArea.getLineCount();
        for (int i = 0; i < lines; i++) {
            model.addElement(i);
        }
        final JComboBox cBox = new JComboBox(model);
        cBox.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                int index = (Integer)cBox.getSelectedItem();
                textArea.setCaretPosition(
                        textArea.getDocument().getDefaultRootElement().getElement(index).getStartOffset());
                textArea.requestFocusInWindow();
            }
        });
        return cBox;
    }

    private JTextArea createTextArea() {
        JTextArea textArea = new JTextArea(10, 50);
        textArea.setMargin(new Insets(15, 15, 15, 15));
        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);
        String text 
                = "0 Hello World\n" + 
                "1 Hello World\n" + 
                "2 Hello World\n" + 
                "3 Hello World\n" + 
                "4 Hello World\n" + 
                "5 Hello World\n" + 
                "6 Hello World\n" +
                "7 Hello World\n" + 
                "8 Hello World\n" + 
                "9 Hello World\n"; 
        textArea.setText(text);
        return textArea;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                new TestCaret();
            }
        });
    }
}

import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
公共类TestCaret{
公共测试插入符号(){
JTextArea textArea=createTextArea();
JComboBox cBox=createComboBox(textArea);
JFrame=新JFrame();
frame.add(新的JScrollPane(textArea));
添加框架(cBox,BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
专用JComboBox createComboBox(最终JTextArea textArea){
DefaultComboxModel=新的DefaultComboxModel();
int lines=textArea.getLineCount();
对于(int i=0;i