2015-04-22 55 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到任何东西,所以它的文字不会被显示。我建议你通过将它添加到GUI来解决这个问题。

0

尝试添加

l1.revalidate(); 

l1.repaint(); 

或两者的顺序的setText()

+0

气垫船的答案是你的第一个赌注 – misterti