2014-03-27 11 views
0

我有一個Strings改變與Jbuttons中的String數據在Java中

我有四個JButtons b1 b2 b3 b4 默認String sHello World B1使String s toUpperCase B2使String s toLowerCase B3允許用戶修改字符串 B4復位字符串到Hello World

當我運行該程序時,我有s設置爲Hello World,但是當我點擊我的按鈕時,字符串不是changin克到它的新屬性。

import java.awt.EventQueue; 
import java.awt.event.*; 
import javax.swing.*; 

public class Driver { 
    String s = "Hell World"; 
    String up; 
    String low; 

    private JFrame f; 
    private JPanel p; 

    JFrame frame = new JFrame("Add Some Text"); 

    JButton b1 = new JButton("Uppercase"); 
    JButton b2 = new JButton("Lowercase"); 
    JButton b3 = new JButton("New"); 
    JButton b4 = new JButton("Reset"); 

    JLabel jl = new JLabel(s); 

    public Driver() {  
     gui(); 

    } 

    public void gui() { 
     f = new JFrame("Hello World");  
     p = new JPanel(); 
     f.add(p); 
     p.setLayout(null); 

     p.add(b1); 
     p.add(b2); 
     p.add(b3); 
     p.add(b4); 

     p.add(jl); 

     b1.setLocation(27, 80); 
     b2.setLocation(300, 80); 
     b3.setLocation(27, 180); 
     b4.setLocation(300, 180); 

     jl.setLocation(240, 20); 

     b1.setSize(230, 80); 
     b2.setSize(230, 80); 
     b3.setSize(230, 80); 
     b4.setSize(230, 80); 

     jl.setSize(230, 20); 

     // pack the frame for better cross platform support 
     f.pack(); 
     // Make it visible 
     f.setVisible(true); 
     f.setSize(560,300); // default size is 0,0 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     b1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e){ 
       up = s.toUpperCase(); 
      } 
     }); 

     b2.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e){ 
       low = s.toLowerCase();  
      } 
     }); 

     b3.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e){ 
       s = JOptionPane.showInputDialog(frame, "");   
      } 
     }); 

     b4.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e){ 
      s = "Hello World";  
      } 
     }); 

    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new Driver(); 

      } 
     }); 
    } // End main Method 

     } // End class Driver 

回答

3

您必須將文本設置爲標籤! 試試這個:

b1.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e){ 
      jl.setText(s.toUpperCase()); 
     } 
    }); 

    b2.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e){ 
      jl.setText(s.toLowerCase());  
     } 
    }); 

    b3.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e){ 
      s = JOptionPane.showInputDialog(frame, ""); 
      jl.setText(s); 
     } 
    }); 

    b4.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e){ 
      jl.setText("Hello World"); 
     } 
    }); 
+0

謝謝!!!!!!! – wuno

1

實際上字符串是變化的,在這裏發生了什麼,你有沒有跟該字符串的新值更新JLabel

所以,你的代碼應該是這樣的:

b3.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e){ 
      s = JOptionPane.showInputDialog(frame, ""); 
      jl.setText(s);  
     } 
    }); 

然後在每個操作ActionListener中添加以下行。

jl.setText(newValue);// newValue depends on what the ActionListener do.