Не добавляйте компоненты в paintComponent. Этот метод предназначен только для рисования, а не для программной логики или построения графического интерфейса. Знайте, что этот метод вызывается много раз, часто JVM, и большую часть времени он находится вне вашего контроля, а также знайте, что когда вы запрашиваете его вызов через метод repaint (), это всего лишь предложение и менеджер по окраске может иногда игнорировать ваш запрос. Метод paintComponent должен быть бережливым и быстрым, поскольку все, что его замедляет, замедляет воспринимаемую отзывчивость вашего приложения.
В вашем текущем коде я даже не вижу необходимости переопределять метод paintComponent, поэтому, если вам это не нужно (например, при рисовании компонента на заказ), я предлагаю вам избавиться от этого метода ( и призывы к перекрашиванию и повторной проверке). Вместо этого добавьте свои компоненты в конструктор класса и убедитесь, что упаковали контейнер верхнего уровня после добавления компонентов и перед вызовом setVisible (true). Самое главное - прочитайте учебники по Swing, так как все это там описано.
например.,
Main.java
import javax.swing.*;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("Askhsh 3");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ColorJPanel application = new ColorJPanel();
frame.add(application);
frame.pack();
frame.setVisible(true);
}
}
ColorJPanel.Java
import java.awt.*;
import javax.swing.*;
public class ColorJPanel extends JPanel{
public static final int CJP_WIDTH = 500;
public static final int CJP_HEIGHT = 500;
public ColorJPanel() {
this.setBackground(Color.WHITE);
JButton arxikopoihsh = new JButton("Αρχικοποίκηση");
JButton klhrwsh = new JButton("Κλήρωση");
add(arxikopoihsh);
add(klhrwsh);
}
// let the component size itself
public Dimension getPreferredSize() {
return new Dimension(CJP_WIDTH, CJP_HEIGHT);
}
}