0

以前、JTextField に下からテキストを挿入させる方法について質問しました。今、私はコードに問題があります。テスト用に、少し編集しました。ここに私が今使っているコードがあります:

public class BaseTextAreaDemo {

private static JTextArea textArea;

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
            }

            final JFrame frame = new JFrame("Base JTextArea App");
            final JPanel panel = new JPanel();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new BorderLayout());
            panel.setLayout(new BorderLayout());
            JPanel textAreaPanel = getBaseTextArea();
            JScrollPane scrollPane = new JScrollPane(textAreaPanel)  {
                public Dimension getPreferredSize() {
                    return new Dimension(300, 230);
                }
            };

            panel.add(scrollPane, BorderLayout.SOUTH);
            JTextField textField = new JTextField();
            textField.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent arg0) {
                    textArea.append(arg0.getActionCommand() + "\n");

                }

            });
            frame.add(panel, BorderLayout.CENTER);
            frame.add(textField, BorderLayout.SOUTH);
            frame.pack();
            frame.setLocationByPlatform(true);
            frame.setVisible(true);
        }

        private JPanel getBaseTextArea() {
            textArea = new JTextArea();
            textArea.setLineWrap(true);
            textArea.setWrapStyleWord(true);
            textArea.append("bla bla bla\n");
            textArea.append("new text here");
            JPanel panel = new JPanel(new BorderLayout());
            panel.setBackground(textArea.getBackground());
            panel.setBorder(textArea.getBorder());
            textArea.setBorder(null);
            panel.add(textArea, BorderLayout.SOUTH);

            return panel;
        }

    });

}

これを必要とするプログラムにも textField が必要なので、textField を追加しました。この方法でさらに行を追加すると便利です。

問題は、このプログラムを実行して垂直スクロールバーが表示されるまで行を追加すると、水平スクロールバーも表示されることです。オフにできることはすでにわかっていましたが、一部のテキストが画面からはみ出してしまいます。また、フレームを広げて通常のサイズに戻すと、水平スクロールバーは広げたウィンドウのサイズのままになります。

問題のいくつかの写真

もう 1 つの問題は、JTextField でのスクロール速度が非常に遅いことです。

4

2 に答える 2

0

textArea の PreferedSize を ur JScrollPane と同じに設定してみてください。

textArea.setPreferedSize(Dimension(300, 230));

水平スクロールバーを無効にすることもできます:

scrollPane.setHorizonalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

Scrollspeed は次のように設定できます。

scrollPane.getVerticalScrollBar().setUnitIncrement(16);

私は問題を解決できました:スクロールペインに追加しているパネルです。JTextArea を ScrollPane に直接追加すると、必要な場合にのみ水平バーが表示されます。

textArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(textArea);
于 2013-07-04T16:11:58.137 に答える
0

水平スクロールバーを完全に削除したい場合は、次のコード行を で呼び出すことをお勧めしますJScrollPane

scrollPane.setHorizonalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

于 2013-07-04T16:13:41.943 に答える