使用Java中的Jbuttons更改字符串数据

时间:2014-03-27 14:20:19

标签: java string

我有String名为s

我有四个JButtons b1 b2 b3 b4 默认情况下,String sHello World     b1制作String s toUpperCase     b2使String s toLowerCase成为     b3允许用户更改字符串     b4将字符串重置为Hello World

当我运行程序时,我将s设置为Hello World,但是当我单击我的按钮时,String不会更改为其新属性。

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

2 个答案:

答案 0 :(得分: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");
      }
  });

答案 1 :(得分: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.