Если я запускаю свой код без метода paint (), пользовательский интерфейс выглядит нормально, но после выполнения paint () пользовательский интерфейс появляется только после нажатия / наведения курсора на элементы.
Я не знаю, почему это происходит, я где-то читал, что я не могу правильно вызывать метод paint () или что мой setVisible () неверен, но я не уверен.
Мой основной метод:
public static void main(String[] args) {
frame.createGUI();
if(list != null) {
System.out.println(list.toString());
}else{
System.out.println("Het is niet gelukt om uw stoelen juist in te delen. De zaal zit vol.");
}
}
Мой метод createGUI:
public void createGUI() {
JScrollPane scrollPane = new JScrollPane();
setPreferredSize(new Dimension(450, 110));
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
add(scrollPane);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setTitle("Bioscoop Challenge");
JFrame.setDefaultLookAndFeelDecorated(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container window = this.getContentPane();
window.setLayout(new FlowLayout());
resetButton = new JButton("Reset");
seatAmountField = new JTextField("Seats total");
nField = new JTextField("Seats wanted");
methodButton = new JButton("Reservate");
errorMessage = new JLabel("Error message field");
resetButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
list = fillList(seatcount);
frame.validate();
frame.repaint();
}
});
methodButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
list = fillSeats(n, list);
frame.validate();
frame.repaint();
}
});
window.add(resetButton);
window.add(seatAmountField);
window.add(nField);
window.add(methodButton);
window.add(errorMessage);
pack();
validate();
setVisible(true);
}
Метод краски:
public void paint (Graphics g) {
int x = 215;
int y = 200;
int width = 40;
int height = 60;
try {
for (int i = 0; i < list.size(); i++) {
Color color;
Color color2;
if (list.get(i).IsFree()) {
color = red;
color2 = black;
} else {
color = black;
color2 = red;
}
if (list.get(i).booked) {
color = blue;
}
Rectangle r = new Rectangle(x, y, width, height);
g.setColor(color);
g.fillRect(
(int) r.getX(),
(int) r.getY(),
(int) r.getWidth(),
(int) r.getHeight()
);
g.setColor(color2);
g.drawString(list.get(i).seatNumber.toString(), (width + x) - ((width / 2) + (width / 2) / 2), (height + y) - (height / 2));
x = x + 50;
if (x == 1715) {
x = 215;
y = y + 80;
}
}
} catch(Exception e){
errorMessage = new JLabel("ERROR");
}
}
Помощь будет оценена, заранее спасибо.