下面是代码,麻烦帮我解决下 下面的代码有两点需要解决:
一:这个容器设置好了,能运行出结果,但是一添加触发器,就不行了(我不会)
我想要触发器实现的功能:鼠标点击按钮触发的事件实现是用函数,返回一个字符串,添加到文本区域的文本尾部,
二:还期望实现一个功能:再增加一个命令按钮,点击后能清空文本区域内显示的容,该怎么弄?
我是新手,没学几天,望指教,不胜感激!/*********问题出现在注释区域**********/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);
}
}
一:这个容器设置好了,能运行出结果,但是一添加触发器,就不行了(我不会)
我想要触发器实现的功能:鼠标点击按钮触发的事件实现是用函数,返回一个字符串,添加到文本区域的文本尾部,
二:还期望实现一个功能:再增加一个命令按钮,点击后能清空文本区域内显示的容,该怎么弄?
我是新手,没学几天,望指教,不胜感激!/*********问题出现在注释区域**********/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);
}
}
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:再次建议不要在主方法里写所有的代码