Производительность носивJAVA

Программисты JAVA общаются здесь
Anonymous
Производительность носив

Сообщение Anonymous »

Вот mre. < /p>

Код: Выделить всё

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import javax.swing.plaf.basic.BasicTextFieldUI;
import java.awt.Component;
import java.awt.Container;
import java.awt.Graphics;

public class TextFieldDemo {

public static void main(String[] args) {
Container mainPanel = createMainPanel();
JFrame frame = new JFrame("Text field demo");
frame.setContentPane(mainPanel);
frame.setLocationRelativeTo(null);
frame.pack();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
}

private static Container createMainPanel() {
JPanel panel = new JPanel();
panel.add(createTextField());
return panel;
}

private static Component createTextField() {
JTextField textField = new JTextField(10);
textField.setUI(new BasicTextFieldUI() {
int counter = 1;

@Override
public void update(Graphics g, JComponent c) {
super.update(g, c);
textField.setBorder(textField.getBorder());
//                textField.setBorder(getBorder());
System.out.printf("UPDATING %d...%n", counter++);
}

private Border getBorder() {
EmptyBorder border = new EmptyBorder(0, 3, 0, 3);
return border;
}
});
return textField;
}
}
< /code>
 test #1 < /h1>
Запустите его как есть, и установите курсор в поле.UPDATING 26...
UPDATING 27...
UPDATING 28...
UPDATING 29...
UPDATING 30...
... но процессор работает хорошо:

shifting the Focus. /> тест #2 < /h1>
Если я расстроен другую строку, с другой стороны: < /p>

Код: Выделить всё

//                textField.setBorder(textField.getBorder());
textField.setBorder(getBorder());
< /code>
Это нанесет ущерб моей машине. Обновления гораздо чаще ... < /p>
UPDATING 39745...
UPDATING 39746...
UPDATING 39747...
UPDATING 39748...
..... Написание по моему процессору:

witry, если я сдвинуте больше, не совсем то, что я могу не сдвинуть, не совсем то. Остановитесь, и использование процессора становится еще хуже (30+).
Насколько я понимаю, если я установим новый экземпляр границы в методе обновления пользовательского интерфейса, он введет в бесконечный цикл: настройка будет вызвать перепончатель () , который, в свою очередь, позвонит в метод обновления:

"

Код: Выделить всё

// javax.swing.JComponent#setBorder
public void setBorder(Border border) {
Border         oldBorder = this.border;

this.border = border;
firePropertyChange("border", oldBorder, border);
if (border != oldBorder) {
if (border == null || oldBorder == null ||
!(border.getBorderInsets(this).equals(oldBorder.getBorderInsets(this)))) {
revalidate();
}
repaint();
}
}
Мои вопросы:

Почему это происходит, я предполагаю, я предполагаю?>

Подробнее здесь: https://stackoverflow.com/questions/796 ... ng-updates

Вернуться в «JAVA»