代码之家  ›  专栏  ›  技术社区  ›  Community wiki

在控制台中输入特定的行,而不是整个JTextArea

  •  0
  • Community wiki  · 技术社区  · 3 年前

    我是Java的新手,正在尝试制作一个与MatLAB的命令窗口完全类似的GUI。

    我正在尝试将当前在JTextArea中键入的行发送到控制台,而不是整个JTextArea。我目前的策略是使用插入侦听器和键侦听器。现在我使用“matlab的响应”作为占位符响应,当我按下回车键时,它应该是行下面的行。

    这是我的代码:

    public class MatlabGui extends JPanel implements KeyListener {
    
        protected JTextArea myTextArea;;
    
        public MatlabGui() {
            super(new GridBagLayout());
    
            myTextArea = new JTextArea(50, 75);
            myTextArea.setEditable(true);
            JScrollPane myScrollPane = new JScrollPane(myTextArea);
    
            GridBagConstraints myCons = new GridBagConstraints();
            myCons.gridwidth = GridBagConstraints.REMAINDER;
    
            myCons.fill = GridBagConstraints.BOTH;
            myCons.weightx = 1;
            myCons.weighty = 1;
            add(myScrollPane, myCons);
    
            myTextArea.addKeyListener(this);
    
        }
    
        private static void createAndShowGUI() {
            JFrame frame = new JFrame("Matlab");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new MatlabGui());
            frame.pack();
            frame.setVisible(true);
    
        }
    
        public static void main(String[] args) {
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
        }
    
    @Override
    public void keyPressed(KeyEvent evt) {
        // TODO Auto-generated method stub
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            try {
                myTextArea.addCaretListener(CaretListener);
                int caretpos = myTextArea.getCaretPosition();
                int start = 0;
                int end = 0;
    
                start = myTextArea.getLineStartOffset(caretpos);
                end = myTextArea.getLineEndOffset(caretpos);
    
                System.out.println(myTextArea.getText(start, end));
    
            } catch (BadLocationException ex) {
                System.out.println(ex.getMessage());
            }
            myTextArea.append("\n" + ">>>" + " " + "matlab's response");
                    }
    
    }    
        public String getString() {
            return myTextArea.getText();
        }
    
    
        @Override
        public void keyReleased(KeyEvent arg0) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void keyTyped(KeyEvent arg0) {
            // TODO Auto-generated method stub
        }
    
    }
    

    我们非常感谢所有的帮助。干杯

    2 回复  |  直到 12 年前
        1
  •  0
  •   TroyAndAbed    12 年前

    对于您的其他问题:

    你的状况 if (evt.getKeyCode() == KeyEvent.VK_ENTER) 在之前结束 myTextArea.append("\n" + ">>>" + " " + "matlab's response"); 因此,当按下某个键时,总是调用myTestArea.append。

    你应该做到:

     if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            try {
                // Hint
                // offset=myTextArea.getLineOfOffset(myTextArea.getCaretPosition());
                int start = 0;
                int end = 0;
                start = myTextArea.getLineStartOffset(start);
                end = myTextArea.getLineEndOffset(end);
    
                System.out.println(myTextArea.getText(start, end));
    
            } catch (BadLocationException ex) {
                System.out.println(ex.getMessage());
            }
    
            String text = myTextArea.getText();
            System.out.println(text);
    
            myTextArea.append("\n" + ">>>" + " " + "matlab's response");
        }
    
        2
  •  0
  •   Taylor Fireman    12 年前

    我想明白了:

    @Override
    public void keyPressed(KeyEvent evt) {
        // TODO Auto-generated method stub
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            try {
                int end = myTextArea.getCaretPosition();
                int row = myTextArea.getLineOfOffset(end);
                int column = end - myTextArea.getLineStartOffset(row);
                int begin = end - column;
                int length = end - begin;
    
                System.out.println(myTextArea.getText(begin, length));
    
            } catch (BadLocationException ex) {
                System.out.println(ex.getMessage());
            }
            myTextArea.append("\n" + ">>>" + " " + "matlab's response");
        }
    
    }