下面是代码,麻烦帮我解决下 下面的代码有两点需要解决:
一:这个容器设置好了,能运行出结果,但是一添加触发器,就不行了(我不会)
我想要触发器实现的功能:鼠标点击按钮触发的事件实现是用函数,返回一个字符串,添加到文本区域的文本尾部,
二:还期望实现一个功能:再增加一个命令按钮,点击后能清空文本区域内显示的容,该怎么弄?
我是新手,没学几天,望指教,不胜感激!/*********问题出现在注释区域**********/import java.awt.Container;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import java.util.Random; 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/*class J_ActionListener implements ActionListener
{

public void actionPerformed(ActionEvent e)
{
JButton b=(JButton)e.getSource();
sta.insert(J_Random(1),4);
//sta.setText(J_Random(1));
   }
}*/
public class J_Boxlayout
{


/*public static String J_Random(int x)
{int j,i=0;
Random a=new Random();
if(x==1)
{String result_1="3D自选结果\n";
 for(i=0;i<3;i++)
 j=a.nextInt(10);
 result_1=result_1+j+"  ";
 return result_1;
}
else if(x==2)
{String result_2="七星彩自选结果\n";
for(i=0;i<7;i++)
{
 j=a.nextInt(10);
 result_2=result_2+j+"  ";
}
return result_2;
}


String result_3="双色球自选结果\n";
for(i=0;i<6;i++)
{
 j=1+a.nextInt(33);
 result_3=result_3+j+"  ";
}
return result_3=result_3+(1+a.nextInt(16));
}*/


public static void main(String[] args)
{
JFrame app = new JFrame("自选号");
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(450,230);
Container c = app.getContentPane();
c.setLayout(new BoxLayout(c,BoxLayout.X_AXIS));
JPanel[] p = new JPanel[2];

//String ssl="";

JTextArea ta = new JTextArea("自选",10,30);
JScrollPane sta = new JScrollPane(ta);
p[0]=new JPanel();
p[0].add(sta);
c.add(p[0]);

p[1]=new JPanel();
p[1].setLayout(new BoxLayout(p[1],BoxLayout.Y_AXIS));
c.add(p[1]);
String s;
String S_RanResult="";
String[] st={"    3 D   ","七星彩","双色球"};
JButton b;

for(int i=0;i<3;i++)
{
s=st[i];
b=new JButton(s);
/*J_ActionListener bb=new J_ActionListener();
b.ActionListener(bb);*/
p[1].add(b);
c.add(p[1]);
}



app.setVisible(true);
}
}

解决方案 »

  1.   


    import java.awt.Container;
    import javax.swing.BoxLayout;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JTextArea;
    import javax.swing.JScrollPane;
    import javax.swing.JPanel;
    import java.util.Random;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;public class J_Boxlayout {
    private static JScrollPane sta;
    private static JTextArea ta;
     public static String J_Random(int x) {
    int j=0, i = 0;
    Random a = new Random();
    if (x == 1) {
    String result_1 = "3D自选结果\n";
    for (i = 0; i < 3; i++)
    j = a.nextInt(10);
    result_1 = result_1 + j + " ";
    return result_1;
    } else if (x == 2) {
    String result_2 = "七星彩自选结果\n";
    for (i = 0; i < 7; i++) {
    j = a.nextInt(10);
    result_2 = result_2 + j + " ";
    }
    return result_2;
    } String result_3 = "双色球自选结果\n";
    for (i = 0; i < 6; i++) {
    j = 1 + a.nextInt(33);
    result_3 = result_3 + j + " ";
    }
    return result_3 = result_3 + (1 + a.nextInt(16));
    }
      public static void main(String[] args) {
    JFrame app = new JFrame("自选号");
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    app.setSize(450, 230);
    Container c = app.getContentPane();
    c.setLayout(new BoxLayout(c, BoxLayout.X_AXIS));
    JPanel[] p = new JPanel[2]; // String ssl=""; ta = new JTextArea("自选", 10, 30);
    sta = new JScrollPane(ta);
    p[0] = new JPanel();
    p[0].add(sta);
    c.add(p[0]); p[1] = new JPanel();
    p[1].setLayout(new BoxLayout(p[1], BoxLayout.Y_AXIS));
    c.add(p[1]);
    String s;
    String S_RanResult = "";
    String[] st = { "    3 D  ", "七星彩", "双色球" };
    JButton b; for (int i = 0; i < 3; i++) {
    s = st[i];
    b = new JButton(s);b.addActionListener(new J_ActionListener());
    /*
     * J_ActionListener bb=new J_ActionListener(); b.ActionListener(bb);
     */
    p[1].add(b);
    c.add(p[1]);
    } app.setVisible(true);
    }
    static class J_ActionListener implements ActionListener
     {  public void actionPerformed(ActionEvent e)
     {
    // JButton b=(JButton)e.getSource();
     if(e.getActionCommand().trim().equals("3 D"))
     ta.append(J_Random(1));
     else if(e.getActionCommand().trim().equals("七星彩"))
     ta.append(J_Random(2));
     else if(e.getActionCommand().trim().equals("双色球"))
     ta.append(J_Random(3));
     }
     }
    }
    改正过的程序,测试过了,正常
    你源程序中有几个问题
    1:把构造代码都写到了main方法里,这是不可取的,构造可以在构造方法里写,还有一些其他的方法,main方法里只写测试程序
    2:J_ActionListener这个类写成内部类,这样可以访问到外部类的属性和方法,由于你把构造等都写在了main方法里,所以这里写成了静态内部类
    3:int j=0, i = 0;后面一个地方使用j,但是你源程序中的j没有赋初值
    4:Container c = app.getContentPane();完全没有必要,你就用frame去设置layout和add组件就可以
    5:if(e.getActionCommand().trim().equals("3 D"))
     ta.append(J_Random(1));
     else if(e.getActionCommand().trim().equals("七星彩"))
     ta.append(J_Random(2));
     else if(e.getActionCommand().trim().equals("双色球"))
     ta.append(J_Random(3));
     }判断事件发生在哪个按钮
    5:再次建议不要在主方法里写所有的代码