JTextField: измените каретку так, чтобы она выглядела как вставка Eclipse insert [duplicate]

Я возвращаю свое заявление. сумма не является победителем. Хотя это быстрее, когда список невелик. Но производительность значительно ухудшается при использовании больших списков.

>>> timeit.Timer(
        '[item for sublist in l for item in sublist]',
        'l=[[1, 2, 3], [4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7]] * 10000'
    ).timeit(100)
2.0440959930419922

Версия суммы все еще работает более минуты, и она еще не завершила обработку!

Для средних списков:

>>> timeit.Timer(
        '[item for sublist in l for item in sublist]',
        'l=[[1, 2, 3], [4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7]] * 10'
    ).timeit()
20.126545906066895
>>> timeit.Timer(
        'reduce(lambda x,y: x+y,l)',
        'l=[[1, 2, 3], [4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7]] * 10'
    ).timeit()
22.242258071899414
>>> timeit.Timer(
        'sum(l, [])',
        'l=[[1, 2, 3], [4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7]] * 10'
    ).timeit()
16.449732065200806

Использование небольших списков и timeit: number = 1000000

>>> timeit.Timer(
        '[item for sublist in l for item in sublist]',
        'l=[[1, 2, 3], [4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7]]'
    ).timeit()
2.4598159790039062
>>> timeit.Timer(
        'reduce(lambda x,y: x+y,l)',
        'l=[[1, 2, 3], [4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7]]'
    ).timeit()
1.5289170742034912
>>> timeit.Timer(
        'sum(l, [])',
        'l=[[1, 2, 3], [4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7]]'
    ).timeit()
1.0598428249359131
2
задан mKorbel 25 April 2012 в 17:13
поделиться

3 ответа

Вы видели этот пример из книги Oreilly Swing, которая плавает по всему Интернету? Кажется, вы можете настроить каретку много.

http://www.java2s.com/Code/Java/Swing-JFC/Fanciercustomcaretclass.htm

4
ответ дан Jim 4 September 2018 в 09:34
поделиться

возможно, есть три способа, которыми я могу воспроизвести Caret и выбор в th JTextComponents

import java.awt.Color;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.DefaultCaret;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Highlighter;

public class TextFieldExample extends JFrame {

    private static final long serialVersionUID = 1L;

    public TextFieldExample() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        JPanel panel = new JPanel();
        JTextField tfield = new JTextField(10);
        tfield.setText("default text");
        final JTextField tfield2 = new JTextField(10);
        tfield2.setText("default text");
        tfield2.addFocusListener(new FocusListener() {

            public void focusGained(FocusEvent fe) {
                tfield2.setCaretPosition(tfield2.getDocument().getLength());
            }

            public void focusLost(FocusEvent fe) {
            }
        });
        JTextField tfield3 = new JTextField(10);
        tfield3.setText("default text");
        tfield3.setCaret(new HighlightCaret());
        panel.add(tfield);
        panel.add(tfield2);
        panel.add(tfield3);
        add(panel);
        pack();
        setVisible(true);
    }

    class HighlightCaret extends DefaultCaret {

        private final Highlighter.HighlightPainter unfocusedPainter =
                new DefaultHighlighter.DefaultHighlightPainter(new Color(230, 230, 210));
        private static final long serialVersionUID = 1L;
        private boolean isFocused;

        @Override
        protected Highlighter.HighlightPainter getSelectionPainter() {
            return isFocused ? super.getSelectionPainter() : unfocusedPainter;
        }

        @Override
        public void setSelectionVisible(boolean hasFocus) {
            if (hasFocus != isFocused) {
                isFocused = hasFocus;
                super.setSelectionVisible(false);
                super.setSelectionVisible(true);
            }
        }
    }

    public static void main(String... args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                TextFieldExample textFieldExample = new TextFieldExample();
            }
        });
    }
}
4
ответ дан mKorbel 4 September 2018 в 09:34
поделиться

Возможно, это может помочь http://java-sl.com/tip_overwrite_mode.html

3
ответ дан StanislavL 4 September 2018 в 09:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: