2015-04-22 2 views
-1

Я попытался реализовать этот код, в основном, что он делает, когда я нажимаю только одну кнопку, он увеличивает один блок над меткой над кнопкой. Другими словами, он показывает, сколько раз пользователь нажал кнопку. Но моя проблема в том, что я не могу обновить ярлык, когда нажимаю кнопку. Переменная, которая содержит число «кликов», увеличивается, но на этикетке она остается с начальным значением объявления, 0. Может ли кто-нибудь помочь?ярлык вне actionPerformed не обновляется

import javax.swing.*; 

import java.awt.*; 

import java.awt.event.ActionEvent; 

import java.awt.event.ActionListener; 



public class ContadorCliques extends JFrame { 

    private TrataEvento trataEvento; 
    private JButton buttonClick; 
    private int clickCont = 0; 
    private JLabel l1; 

    public static void main(String[] args) { 

     ContadorCliques contador1 = new ContadorCliques("Hello!"); 

    } 

    public ContadorCliques(String titulo) { 

     super(titulo); 
     Container c = getContentPane(); 


     BorderLayout bl = new BorderLayout(); 
     c.setLayout(bl); 

     l1=new JLabel(String.valueOf(clickCont)); 


     JPanel pBotoes = criarPainelBotao(); 
     c.add(pBotoes, BorderLayout.SOUTH); 
     //add(pBotoes, BorderLayout.SOUTH); 

     JPanel pCliques = criarPainelCliques(); 
     c.add(pCliques, BorderLayout.CENTER); 
     //add(pCliques, BorderLayout.CENTER); 



     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setSize(400, 200); 
     setMinimumSize(new Dimension(getWidth(), getHeight())); 
     setLocationRelativeTo(null); 
     setVisible(true); 

    } 

    private JPanel criarPainelCliques() { 

     JLabel lbl = new JLabel("Número de Cliques: " + l1.getText()); 


     JPanel p = new JPanel(); 

     lbl.setFont(lbl.getFont().deriveFont(20.0f)); 
     p.add(lbl, BorderLayout.CENTER); 


     return p; 
    } 

    private JPanel criarPainelBotao() { 

     trataEvento = new TrataEvento(); 

     buttonClick = criarBotao(); 

     JPanel p = new JPanel(); 

     p.add(buttonClick); 

     return p; 
    } 

    private JButton criarBotao() { 

     JButton btn = new JButton("Click Here!"); 
     btn.addActionListener(trataEvento); 
     return btn; 
    } 

    private class TrataEvento implements ActionListener { 

     @Override 
     public void actionPerformed(ActionEvent e) { 

      String obj = (String) e.getActionCommand(); 
      if (obj.compareTo("Click Here!")==0) { 
       clickCont++; 
       System.out.println("Funciona"); 
       System.out.println(clickCont); 
       l1.setText(String.valueOf(clickCont)); 

      } 

     } 
    } 

} 

ответ

0

Измените метод criarPainelCliques(), чтобы выглядеть следующим образом:

private JPanel criarPainelCliques() { 

     JLabel lbl = new JLabel("Número de Cliques: "); 
     JPanel p = new JPanel(); 
     lbl.setFont(lbl.getFont().deriveFont(20.0f)); 
     p.add(lbl, BorderLayout.CENTER); 
     p.add(l1); 

     return p; 
    } 

В настоящее время у только читать ваш clickvalue раза здесь:

 JLabel lbl = new JLabel("Número de Cliques: " + l1.getText()); 

l1 никогда не читать снова и поэтому ваш клик счетчик остается на 0.

+0

спасибо большого !!! Это решило проблему –

0

Вы никогда не добавить JLabel имени l1 к чему-либо, и поэтому никогда не будет отображаться его текст. Я предлагаю вам исправить это, добавив его в графический интерфейс.

0

попробуйте добавить

l1.revalidate(); 

или

l1.repaint(); 

или как в этом порядке после SetText()

+0

ответа суда на воздушной подушке является вашей первой ставкой – misterti

Смежные вопросы