Grundlegend habe ich ein JPanel mit einem GridLayout 5x5 und jedem "Quadrat" als JLabel mit einer Nummer und einer anderen Hintergrundfarbe, abhängig von der dort vorhandenen Nummer.Update Array von JLabels innerhalb eines JPanels mit GridLayout 5x5
Ich muss das Panel jedes Mal aktualisieren, wenn ich auf einen der Knöpfe (außer Menü eins) klicke, weil es das Array des Arrays von Ints ändert, wo ich die Zahlen bekomme, um die Etiketten zu setzen.
Meine Frage ist, wie aktualisiere ich jeden JLabel (einschließlich Farbe) JFrame Layout
public static JPanel painel(){
novo_jogo();
// Painel Grelha
JPanel grelha = new JPanel();
GridLayout grid_grelha = new GridLayout(linhas, colunas, 3, 3);
grelha.setLayout(grid_grelha);
grelha.setOpaque(true);
grelha.setSize(janela_x - 140, janela_y-140);
grelha.setLocation(70, 20);
grelha.setBackground(Color.GREEN);
// criar JLabels
for (int num = 0; num < linhas; num++){
for (int num2 = 0; num2 < colunas; num2++){
JLabel label = new JLabel();
label.setText(String.valueOf(tabuleiro[num][num2]));
label.setOpaque(true);
label.setBackground(select_cor(tabuleiro[num][num2]));
label.setHorizontalAlignment(SwingConstants.CENTER);
grelha.add(label);
}
}
return grelha;
dies ist die Funktion, das gesamte Feld in den richtigen Gittern etc schafft ... (Dies wird auch in eine diferent Klasse, die vom Haupt
public class Board extends Game{....}
meiner Idee erstreckt war die repaint() Funktion zu verwenden, nur das Panel mit dem Netz JPanel grelha = Board.painel();
und dannzu aktualisieren später war meine Idee, das Gitter (grelha) Panel nur zu aktualisieren, aber wenn ich dies tun:
/* Main */
public static void main(String[] args){
frame.setTitle("Jogo 2048 em Java"); // Titulo da janela
frame.setSize(janela_x, janela_y); // Define o tamanho da janela
frame.setLocationRelativeTo(null); // Centraliza a janela no ecrã
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setBackground(Color.WHITE);
frame.setResizable(false); // Não deixa a janela ser aumentada
// Painel Fundo
JPanel fundo = new JPanel();
fundo.setBackground(Color.WHITE);
// Painel Botões
JPanel botoes = new JPanel();
GridLayout grid_botoes = new GridLayout(1, 5, 5, 5);
botoes.setLayout(grid_botoes);
botoes.setOpaque(true);
botoes.setSize(360, 50);
botoes.setLocation(70, 390);
botoes.setBackground(Color.WHITE);
JPanel grelha = Board.painel();
// Botões e colocar no painel
JButton init = new JButton("Init");
JButton left = new JButton("Left");
JButton down = new JButton("Down");
JButton right = new JButton("Right");
JButton menu = new JButton("Menu");
botoes.add(init);
botoes.add(left);
botoes.add(down);
botoes.add(right);
botoes.add(menu);
// Adicionar Panels à janela
frame.getContentPane().add(botoes);
frame.getContentPane().add(grelha);
frame.getContentPane().add(fundo);
frame.setVisible(true);
// ActionListener dos botões
ActionListener accao_botoes = new ActionListener() {
public void actionPerformed(ActionEvent e) {
int n = -1;
if (e.getSource().equals(init)) n = 0;
else if (e.getSource().equals(left)) n = 1;
else if (e.getSource().equals(down)) n = 2;
else if (e.getSource().equals(right)) n = 3;
else n = 4;
switch (n){
case 0:
Board.novo_jogo();
Board.print();
break;
case 1:
Board.esquerda();
Board.print();
break;
case 2:
Board.baixo();
Board.print();
break;
case 3:
Board.direita();
Board.print();
break;
case 4:
janela_menu();
break;
}
}
};
init.addActionListener(accao_botoes);
left.addActionListener(accao_botoes);
down.addActionListener(accao_botoes);
right.addActionListener(accao_botoes);
menu.addActionListener(accao_botoes);
while(true){
frame.repaint();
try{
Thread.sleep(10);
}catch(Exception e){}
}
}
es das Panel aktualisieren tut, infact es tut nichts aktualisieren :( i grelha.validate tryed(), grelha.repaint() und nichts scheint zu funktionieren, fehlt mir irgendetwas?
Jeder kann mir helfen?
erste - ich kann nicht siehe ' frame.setVisible (true); ' Sekunde - wenn Sie annehmen, den Rahmen zu aktualisieren? – krzydyn
Ich aktualisierte den Code, um alle meine wichtigsten – PandaGOD82
Im sollte die Etiketten jedes Mal zu aktualisieren, wenn ich auf eine der Tasten (außer Menü-Taste) klicken – PandaGOD82