coolsunwind 2005年05月02日
一个关于swing组件的问题!-希望高手不要都去休息了
问题就是为何在别的类文件中无法设置主文件的swing组件的属性。
Demo1.java文件
主要功能室打开一个文件并显示在text_show里,以及随即生成一个7M的文件。
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class Demo1 extends JApplet implements ActionListener
{
JButton button_open = new JButton("open");
JTextArea text_show = new JTextArea();
JButton button_txt = new JButton("生成txt文件");
JLabel label_time = new JLabel();
JFileChooser fd1 = new JFileChooser("open");
ArrayList strrd = new ArrayList();
JProgressBar jpbar1 = new JProgressBar(); //定义进度条
final int MIN = 0,MAX = 100;
File s;
long starttime,endtime;
int m = 0;

public void init()

{
//Init init1 = new Init(); //为何这两句调用不能成功显示!
//init1.init();
JPanel jp=new JPanel();
fd1.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
button_open.addActionListener(this);
getContentPane().setLayout(new BorderLayout());
button_txt.addActionListener(this);
jp.add(button_open);
jp.add(button_txt);
jp.add(label_time);
jp.add(jpbar1); //进度条初始化。
jpbar1.setMinimum(MIN);
jpbar1.setMaximum(MAX);
jpbar1.setValue(MIN);
getContentPane().add(new JScrollPane(text_show),"Center");
getContentPane().add(jp,"North");
}

//
// 事件监听器
public void actionPerformed(ActionEvent e)
{
// open 开始
if(e.getSource().equals(button_open))
{

Open open1 = new Open();//调用open打开一个文件。
s = open1.open();
starttime = new Date().getTime();


//为何下面两句调用不能成功显示??
// Show show1 = new Show();
// show1.show(strrd,s);

//打开文件并显示在text_show里
try
{
FileReader fr = new FileReader(s);
BufferedReader in = new BufferedReader(fr);
String line;
strrd.clear();
while((line=in.readLine())!=null)
{
strrd.add(line);
}
in.close();
if(text_show!=null)
{
text_show.setText(null);
}

for(int i=0;i<strrd.size();i++)
{

text_show.append((String)strrd.get(i)+"\n");
}

}
catch (FileNotFoundException e1)
{
text_show.append(e1.toString());
}
catch (IOException e2)
{
text_show.append(e2.toString());
}
endtime = new Date().getTime();
label_time.setText("本次操作耗时为"+(endtime-starttime)+"毫秒!");
}

// 生成文件开始
else if(e.getSource().equals(button_txt))
{
starttime = new Date().getTime();
Txt txt1 = new Txt();
txt1.txt(jpbar1);
endtime = new Date().getTime();
label_time.setText("本次操作耗时为"+(endtime-starttime)+"毫秒!");
}
// 文件生成结束
//
}

}


Init.java文件,想在demo1中调用它,用以显示demo1中的组件,结果不能成功。

import java.awt.BorderLayout;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class Init extends Demo1
public void init()
{
JPanel jp=new JPanel();
fd1.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
button_open.addActionListener(this);
getContentPane().setLayout(new BorderLayout());
button_txt.addActionListener(this);

jp.add(button_open);
jp.add(button_txt);
jp.add(label_time);
getContentPane().add(new JScrollPane(text_show),"Center");
getContentPane().add(jp,"North");
}
}

open.java文件。


import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JFileChooser;
public class Open extends Demo1
{
public File open()
{

fd1.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
button_open.addActionListener((ActionListener) this);
getContentPane().setLayout(new BorderLayout());
int result1=fd1.showOpenDialog((Component) this);
if(result1!=JFileChooser.APPROVE_OPTION)
{
return null;
}
return fd1.getSelectedFile();

}
}



show.java,为何调用这个类就不能显示text_show里的内容。


import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.JScrollPane;
public class Show extends Demo1
{
public void show(ArrayList strrd,File s)
{
//为何在本类中调用的text_show无法显示内容!!???为什么???


getContentPane().add(new JScrollPane(text_show),"Center");
try
{
FileReader fr = new FileReader(s);
BufferedReader in = new BufferedReader(fr);
String line;
strrd.clear();
while((line=in.readLine())!=null)
{
strrd.add(line);
}
in.close();
if(text_show!=null)
{
text_show.setText(null);
}

for(int i=0;i<strrd.size();i++)
{

text_show.append((String)strrd.get(i)+"\n");
}

}
catch (FileNotFoundException e1)
{
e1.printStackTrace();
}
catch (IOException e2)
{
e2.printStackTrace();
}
}
}

txt.java文件。进度条不能更新!!!这是个重要问题!

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;
import javax.swing.JProgressBar;

public class Txt
{

public void txt(JProgressBar jpbar1)
{
Random rand = new Random();
PrintWriter pw = null;
int k;
try
{
FileWriter fl = new FileWriter("txtdemo.txt");
pw=new PrintWriter(fl);
long m = 0;
long totle = 7*1024*1024;
while(m<totle)
{
k = rand.nextInt(1024);
StringBuffer strtxt = new StringBuffer();
while(strtxt.length()<k)
{
long ran1 = rand.nextLong();
strtxt.append(ran1);
}
m += strtxt.length();
pw.println(strtxt);
int num = (int) ((m/(7*1024*1024))*100);
jpbar1.setValue(num); //设置进度条的值!为何不能成功??
}
}

catch (IOException e1)
{
e1.printStackTrace();
}
pw.close();
}
}



其实就一个问题,swing组件可不可以在别的类文件中调用?如何调用?不能的话怎么办????
...全文
324 点赞 收藏 18
写回复
18 条回复

还没有回复,快来抢沙发~

发动态
发帖子
Java SE
创建于2007-09-28

3.4w+

社区成员

30.7w+

社区内容

Java 2 Standard Edition
社区公告
暂无公告