0

私は Java が初めてで、MatLAB のコマンド ウィンドウとまったく同じように動作する GUI を作成しようとしています。

JTextArea 全体ではなく、JTextArea に現在入力されている行をコンソールに送信しようとしています。私の現在の戦略は、caretlistener と keylistener を使用することです。今のところ、「matlab の応答」をプレースホルダー応答として使用しています。これは、Enter キーを押したときの行の下の行である必要があります。

これが私のコードです:

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
    }

}

すべてのヘルプは非常に高く評価されています。乾杯

4

2 に答える 2

0

私はそれを考え出した:

@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");
    }

}
于 2013-07-09T23:33:33.813 に答える