У меня расширен класс с JPanel. Этот класс содержит несколько других JComponents и много живописи. То, что я сделал, и я знаю, что это не правильно, я переопределил компонент краски для картин, пока все хорошо.
Но я также установил местоположение и размер для всех подкомпонентов в этом методе, потому что они зависят от getWidth и getHeight от JPanel. Я знаю, что это не место для компонентов, но где я могу делать такие вещи. Во время конструктора размеры не заданы. Так как это исправить? Потому что, пока у меня есть метод location и size в методе paintComponent, процессор никогда не прекращает что-то вычислять.
Редактировать: то, что я сделал, выглядело так;
public class abc extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
/** all the painting stuff */
textfield.setLocation(
this.getWidth() * someValue,
this.getHeight() * someotherValue);
// also depends on getHeight() and getWidth()
textfield.setSize(new Dimension(getHeight(), getWidth());
}
}
Все работало нормально, за исключением того, что у меня всегда было использование процессора около 10%. Если закомментировать обе строки, загрузка ЦП снизилась до 0%. Так что теперь я использовал Layoutmanager, как вы рекомендовали. И все же все выглядит хорошо, но загрузка процессора не изменилась, но осталась примерно на 10%. Код, как это выглядит сейчас:
public class abc extends JPanel {
public abc() {
GridBagLayout gblayout = new GridBagLayout();
this.setLayout(gblayout);
textfield = new JTextField();
textfield.setHorizontalAlignment(JTextField.CENTER);
textfield.setBackground(new Color(0, 0, 0, 0));
textfield.setBorder(null);
textfield.setText("0");
gblayout.setConstraints(textfield, new GridBagConstraints(
0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER,
GridBagConstraints.BOTH, new Insets(4, 4, 4, 4), 1, 1));
this.add(textfield);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
/** still the same paintings */ }
}