首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java中怎么将字符一个个显示在文本区下?求各位大侠指点

2012-12-16 
java中如何将字符一个个显示在文本区上?求各位大侠指点~各位大侠好,小弟正研究java,属于菜鸟级别,现有一问

java中如何将字符一个个显示在文本区上?求各位大侠指点~
各位大侠好,小弟正研究java,属于菜鸟级别,现有一问题想请教:
我想做一个计算器,监听器已经加上,但就是不懂如何将按钮上的字
显示在文本区上,像我们常用的计算器那样,输入一个就显示一个,计算
后将结果显示,求个为大侠指点指点啊~分数伺候着
[最优解释]
http://blog.csdn.net/zhaoming262350/article/details/8250807
这儿有一个简单的源代码:
import java.awt.*;
import javax.swing.*;

import java.awt.event.*;

import javax.swing.border.*;

public class Calculator1 extends JFrame implements ActionListener
{
    private JFrame jf;
     private JButton[] allButtons;
     private JButton clearButton;
     private JButton sinButton;
     private JButton cosButton;
     private JButton tanButton;
    // private JButton cotButton;
     private JTextField jtf;
     private boolean isNew = true;
     private String recentOperation = null;
     private String recentNum = null;
     public Calculator1()
     {
      
         /**
          * 设置窗口点击关闭按钮能关闭
          */
      jf=new JFrame("计算器1.0:JAVA");
      jf.addWindowListener(new WindowAdapter()
      {
       public void windowClosing(){
        System.exit(0);
       }
      });
      // 实例化所有的按钮以及编辑栏
      allButtons  = new JButton[16];
      clearButton = new JButton("DEL");
      sinButton   = new JButton("sin");
      cosButton   = new JButton("cos");
      tanButton   = new JButton("tan");
      jtf=new JTextField(25);
      jtf.setEditable(false);
    //  jtf.setHorizontalAlignment(alignment)
      //给CanterPanel中的按钮添加标识符
      String str="123+456-789*0.=/";
      for(int i=0;i<allButtons.length;i++)
      {
       allButtons[i]=new JButton(str.substring(i,i+1));
     }
     }
     public void init(){
      //设置布局
      jf.setLayout(new BorderLayout());
      JPanel northPanel=new JPanel();
      JPanel centerPanel=new JPanel();
      JPanel southPanel=new JPanel();
      northPanel.setLayout(new FlowLayout());
      centerPanel.setLayout(new GridLayout(4,4));


      southPanel.setLayout(new GridLayout(1,4));
      
      northPanel.add(jtf);
      for(int i=0;i<16;i++){
       centerPanel.add(allButtons[i]);
      }
      southPanel.add(sinButton);
      southPanel.add(cosButton);
      southPanel.add(tanButton);
      //southPanel.add(cotButton);
      southPanel.add(clearButton);
      
      
      jf.add(northPanel,BorderLayout.NORTH);
      jf.add(centerPanel,BorderLayout.CENTER);
      jf.add(southPanel,BorderLayout.SOUTH);
      addEventHandler();
     }
     //添加事件监听
    public void addEventHandler()
    {
     jtf.addActionListener(this);
     for(int i=0;i<allButtons.length;i++)
     {
      allButtons[i].addActionListener(this);
     }
     /**
      * 给DEL注册
      */
      clearButton.addActionListener(new ActionListener()
      {
   public void actionPerformed(ActionEvent e)
        {
            // TODO Auto-generated method stub
            Calculator1.this.jtf.setText("");
        }
           });
      
      /***
       * 实现sin,cos,tan 以及 allButton事件驱动按钮
       */
      sinButton.addActionListener(new ActionListener()
      {
          public void actionPerformed(ActionEvent e)
          {
              
            double temp = Math.sin(Double.parseDouble(jtf.getText()));
              jtf.setText(String.valueOf(temp));
              return;
          }
      });
      cosButton.addActionListener(new ActionListener()
      {
          public void actionPerformed(ActionEvent e)
          {
              
            double temp = Math.cos(Double.parseDouble(jtf.getText()));


              jtf.setText(String.valueOf(temp));
              return;
          }
      });
      tanButton.addActionListener(new ActionListener()
      {
          public void actionPerformed(ActionEvent e)
          {
              
            double temp = Math.tan(Double.parseDouble(jtf.getText()));
              jtf.setText(String.valueOf(temp));
              return;
          }
      });
      /*cotButton.addActionListener(new ActionListener()
      {
          public void actionPerformed(ActionEvent e)
          {
              
            double temp =- Double.parseDouble(jtf.getText());
              jtf.setText(String.valueOf(temp));
              return;
          }
      });*/
     }
     //对输入数字的事件处理
public void actionPerformed(ActionEvent e)
      {
          String s= e.getActionCommand();
          if(s.charAt(0)>='0'&&s.charAt(0)<='9')
          {
              if(!isNew)
                  jtf.setText(jtf.getText()+s);
              else
                  jtf.setText(s);
              isNew = false;
              
          }
          /**
           * 对“.”的事件处理
           */
          else if (s.equals("."))
          {
              if(jtf.getText().indexOf(".")!=-1)
                  return;
              if(!isNew &&jtf.getText()!="")


                  jtf.setText(jtf.getText()+".");
              else
                  jtf.setText("0.");
              isNew = false;
              
          }
          //对"="的事件处理
          else if(s.equals("="))
          {
             equalaction(e);
              
          }
          else
          {
             if((jtf.getText()).equals(""))
             return;
             if(recentOperation !=null)equalaction(e);
              recentOperation = s;
              recentNum = jtf.getText();
              isNew = true;
              
          }
    }
/**
 * 对运算符及计算过程的事件处理
 * @param e
 */
    private void equalaction(ActionEvent e) {
        // TODO Auto-generated method stub
        if(recentOperation == null
[其他解释]
 recentNum==null
[其他解释]




<html>
<body>
  <input  id="allSum" value="0"></input>
  <input type="button" value="1" width="60px" id="button1" onclick="one()"></input>
  <input type="button" value="2" width="60px" id="button2"></input>
  <input type="button" value="+" width="60px" id="button3"></input>
  <input type="button" value="=" width="60px" id="button4"></input>
</body>
<script>
function one(){
var one=document.getElementById("button1").value;
var value=document.getElementById("allSum").value;
if(value==0){
  document.getElementById("allSum").value=one ;
}else{
var result=value+one;
document.getElementById("allSum").value=result;
}
alert(one);

}

</script>
</html>


LZ大致就这意思了,就赋值了一下,算法没给弄。
------其他解决方案--------------------


给每个按钮的button都设置值,之后点击下,先获取下结果文本的值,之后再添加上去,不过这里面要考虑的情况比较多,慢慢做吧!
[其他解释]
因为是个玩具例子,所以请楼主不要在意,大致是这个意思,当然要想完善还需要多个if语句


f()
{
one = new JButton("1");
two = new JButton("2");
t = new JTextField(10);

one.addActionListener(this);
two.addActionListener(this);
t.addActionListener(this);

}
public void actionPerformed(ActionEvent e) 
{
int result = 0;
if(e.getSource() == one)
{
t.setText("1");
}
else if(e.getSource() == two)
{
t.setText("2");
}
else if(e.getSource() == add)
{
result = Integer.parseInt(t.getText()) + result;
}
}

[其他解释]
不好意思,发得不完整
再来一遍

class f extends JFrame implements ActionListener
{
JButton add = new JButton("加");
JButton one, two;
JTextField t;

f()
{
one = new JButton("1");
two = new JButton("2");
t = new JTextField(10);

one.addActionListener(this);
two.addActionListener(this);
t.addActionListener(this);

}
public void actionPerformed(ActionEvent e) 
{
int result = 0;
if(e.getSource() == one)
{
t.setText("1");
}
else if(e.getSource() == two)
{
t.setText("2");
}
else if(e.getSource() == add)
{
result = Integer.parseInt(t.getText()) + result;
}
}
}

[其他解释]
既然监听器已经加上了,那么监听按钮的事件好了,没点击一次按钮,获取到该按钮上的字符,然后再获取文本区的字符(一开始为空),然后使用java基础的字符串拼接将二者拼接上即可。

嘿,你监听器都搞定了,字符串拼接不可能不会啊?
[其他解释]

                jtf.getText().equals(""))
            return;
        double last = 0,now = 0;
        
        try
        {
            last = Double.parseDouble(recentNum);
            now = Double.parseDouble(jtf.getText());
            }
        catch(NumberFormatException en)
        
        {
            recentOperation = null;
            recentNum = null;
            jtf.setText("数据输入不合法");
            System.out.println("数据输入不合法");
            isNew = true;
            return;


            
        }
        if(recentOperation.equals("+"))
        {
            last+=now;
            
        }
        if(recentOperation.equals("-"))
        {
            last-=now;
            
        }
        if(recentOperation.equals("*"))
        {
            last*=now;
            
        }
        if(recentOperation.equals("/"))
        {
            last/=now;
            
        }
        jtf.setText(""+last);
        recentNum = jtf.getText();
        recentOperation=null;
        isNew = true;
          }   
          
      
//对CenterPanel设置

    public void setFontAndColor(){
      Font f=new Font("宋体",Font.BOLD,24);
      jtf.setFont(f);
      jtf.setBackground(new Color(0x8f,0xa0,0xfb));
      for(int i=0;i<16;i++)
      {
       allButtons[i].setFont(f);
       allButtons[i].setForeground(Color.RED);
      }
     }
    
    
     public void showMe(){
      init();
      setFontAndColor();
      jf.pack();
      jf.setVisible(true);
      jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     }
    
     public static void main(String[] args){
      new Calculator1().showMe();
     }
}

[其他解释]
如果实在不能理解的话,就理解8楼的代码吧,虽然我也没看,但他是老手了,值得信任,如果1周之内楼主还解决不了的话,我的推荐是别弄这个程序了,先暂停下,把书中关于GUI的例题都打一遍,理解透了在回来继续编吧,因为编程这中东西,你要编出程序来,必须要能把知识融会贯通,不然再怎么死想也不会有太大的结果的,就算误打误撞的编出来,但是那样话费的时间精力值得吗?。。。。。
顺便教一下楼主发代码的消小方法,以前截的图,现在应该还适用。

[其他解释]
楼主,说句心里话,楼主对Java的态度很不扎实啊,这个都是一些很基本的东西,基本到只用一些构造方法和常用的方法,你要多看看书哈,我对java来说也是一个初学者,刚刚学了JAVA几周,我的方法就是不断写程序,不断的翻书,除非特别难的,一般不问的,这几周写的程序超过千行了,推荐楼主多加把劲儿啊!


[其他解释]

引用:
楼主,说句心里话,楼主对Java的态度很不扎实啊,这个都是一些很基本的东西,基本到只用一些构造方法和常用的方法,你要多看看书哈,我对java来说也是一个初学者,刚刚学了JAVA几周,我的方法就是不断写程序,不断的翻书,除非特别难的,一般不问的,这几周写的程序超过千行了,推荐楼主多加把劲儿啊!

谢谢兄台的善意提醒,现在又遇到新的问题了,在显示和计算之间的那一段弄不上去了,还望兄台指教啊~
程序如下:


package cmil;
import java.awt.*;
import java.awt.event.*;

public class Calculator extends WindowAdapter implements ActionListener
{
Frame screen;
TextField showtext;
int da1,da2;
Button b[]=new Button[10];
Button[] a=new Button[8];
String st=new String();
String st1[];
String st2[];
String s[]={"∧","sqrt","Cancel","×","÷","+","-","="};
Calculator()
{
screen=new Frame("Calculator");
showtext=new TextField();
screen.setLayout(null);
screen.setBounds(200,200,400,300);    //设置 窗口显示位置
screen.setBackground(Color.GRAY);     //设置窗口颜色为灰色
screen.add(showtext);                 //生成显示区的文本框
showtext.setBounds(40, 35, 300, 60);  //设置文本框在窗体中的位置
showtext.setBackground(Color.white);  //设置文本框的颜色为白色
showtext.setEditable(false);          //设置文本区为不可编辑
for(int i=0;i<10;i++)
{
b[i]=new Button(""+i);            //显示按钮上的 数字
b[i].addActionListener(this);     //为按钮添加监听事件
screen.add(b[i]);                 //生成按钮
}

for(int j=0;j<8;j++)
{
a[j]=new Button(""+s[j]);
a[j].addActionListener(this);     //为按钮添加监听事件
screen.add(a[j]);
}

//设置按键的位置和大小
b[1].setBounds(5, 105, 65, 65);
b[2].setBounds(70, 105, 65, 65);
b[3].setBounds(135, 105, 65, 65);
a[0].setBounds(200, 105, 65, 65);
a[1].setBounds(265, 105, 65, 65);
a[2].setBounds(330, 105, 65, 65);

b[4].setBounds(5, 170, 65, 65);
b[5].setBounds(70, 170, 65, 65);
b[6].setBounds(135, 170, 65, 65);
a[3].setBounds(200, 170, 65, 65);
a[4].setBounds(265, 170, 65, 65);
a[5].setBounds(330, 170, 65, 65);

b[7].setBounds(5, 235, 65, 65);
b[8].setBounds(70, 235, 65, 65);
b[9].setBounds(135, 235, 65, 65);
b[0].setBounds(200, 235, 65, 65);
a[6].setBounds(265, 235, 65, 65);
a[7].setBounds(330, 235, 65, 65);
screen.addWindowListener(this);    //为窗口添加监听事件
screen.setVisible(true);           //设置窗口为可见
screen.setResizable(false);        //设置窗口为不可变更大小
}

int plus(int data1,int data2)          //加法
{
return data1+data2;
}

int minus(int data1,int data2)         //减法
{
return data1-data2;
}

int multiply(int data1,int data2)      //乘法
{


return data1*data2;
}

float divide(float data1,float data2)  //除法
{
return data1/data2;
}

double sqrt(double data)               //开方
{
return Math.sqrt(data);
}

double power(double data1,double data2) //平方
{
return Math.pow(data1, data2);
}

public void windowClosing(WindowEvent e)    //关闭窗口
{
System.exit(0);
}

public void actionPerformed(ActionEvent e) //文本框的显示和计算
{
//do{
while(e.getSource()==b)
{
int j=0;
for(int i=0;i<10;i++)
if(e.getSource()==b[i])
{
st=st+""+i;
showtext.setText(st);
}
st1[j++]=st;
st="";
}
while(e.getSource()==a)
{
int i=0;
int j;
for( j=0;j<10;j++)
if(e.getSource()==a[j])
{
st=s[j];
showtext.setText(st);
break;
}
st2[i++]=""+st;
st="";
}

switch(j-1)
{
/*i=0;
if(st1[0]=="")
{
da1=0;
}
else
{
da1=Integer.parseInt(st1[i++]);
da2=Integer.parseInt(st1[i++]);
}*/
case 0:
showtext.setText(power(da1,da2));
break;
case 1:showtext.setText(sqrt(da1));
}
//}while(true);
}

public static void main(String[] args)
{
new Calculator();
}
}

[其他解释]

引用:
引用:楼主,说句心里话,楼主对Java的态度很不扎实啊,这个都是一些很基本的东西,基本到只用一些构造方法和常用的方法,你要多看看书哈,我对java来说也是一个初学者,刚刚学了JAVA几周,我的方法就是不断写程序,不断的翻书,除非特别难的,一般不问的,这几周写的程序超过千行了,推荐楼主多加把劲儿啊!
谢谢兄台的善意提醒,现在又遇到新的问题……


额。。。。。这位仁兄,你这个的设计理念有点错误了吧,一个计算器应该是很简单的,

先说错误吧,第一个

switch(j-1)

我实在看不懂这句话是什么意思,所以这句就不不改了。
然后是下面这个,setText的原型是setText(String s),里面要放的是字符串。

case 0:
showtext.setText(String.valueOf(power(da1,da2)));
break;
case 1:
showtext.setText(String.valueOf(sqrt(da1)));

因为你的代码太过于凌乱了,而且思路我是看不懂了。
先说一下计算的方法吧,你虽然设置了很多方法,但是你都没用到呢。。。。。其实如果给我设计一个计算器,先说一下,看了我的思路后,千万自己要重新想个可行的思路来在编一次,因为你的基础不扎实,如果你现在看了我的思路很容易以后也用我的思路的。
首先,你按钮名字处理的还算。。可以吧,可以留着用,然后说到

public void actionPerformed(ActionEvent e)

如果是我写这个里面,不能光是这样,


for(int i=0;i<10;i++)
{
if(e.getSource()==b[i])
{
st=st+""+i;
showtext.setText(st);
}

}

还要把值传给一个外部变量,然后设置3个外部变量,其中一个是标记变量(用于标记是什么符号,如加号减号等),然后在这个里面把判断=号的按钮单独处理,用于调用方法来显示数据。

public void actionPerformed(ActionEvent e)

当然这个方法要你自己来写,这个方法是适用于形参为3个的情况(a符号b),如果是a平方什么的,就在写一个两个参数的方法。只不过在=号事件的时候多加一个if而已,这个方法里面才是处理符号的地方,用相应的方法,把字符串转换成数值就行了,标记变量设置相应的if,进行相应的操作。我可能说得比较凌乱,不过大概就是这个意思。
[其他解释]
引用:
引用:引用:楼主,说句心里话,楼主对Java的态度很不扎实啊,这个都是一些很基本的东西,基本到只用一些构造方法和常用的方法,你要多看看书哈,我对java来说也是一个初学者,刚刚学了JAVA几周,我的方法就是不断写程序,不断的翻书,除非特别难的,一般不问的,这几周写的程序超过千行了,推荐楼主多加把劲儿……

这位兄台请留步,能留个私聊的方式不~?
[其他解释]


引用:
引用:引用:引用:楼主,说句心里话,楼主对Java的态度很不扎实啊,这个都是一些很基本的东西,基本到只用一些构造方法和常用的方法,你要多看看书哈,我对java来说也是一个初学者,刚刚学了JAVA几周,我的方法就是不断写程序,不断的翻书,除非特别难的,一般不问的,这几……


仁兄客气,QQ:408333990
不过这两周会很忙可能不经常上,下周考四级,在下周期考。。。。四级考了3次都没上400.。。蛋疼纠结中。。。

热点排行