有人可以帮助我,我今晚有作业,但有一个绊脚石,因为我似乎没有正确更新JTextArea。循环自己运行并产生6行到consol但不会对GUI做同样的事情?任何建议欢迎。
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTextArea;
@SuppressWarnings("serial")
public class GUI extends JFrame {
private JPanel contentPane;
private JTextArea textField;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GUI frame = new GUI();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public GUI() {
setTitle("Home Improvement");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 666, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
textField = new JTextArea();
textField.setEditable(false);
textField.setBounds(5, 5, 655, 235);
contentPane.add(textField);
JButton btnClear = new JButton("Clear");
btnClear.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0)
{
textField.setText("");
}
});
btnClear.setBounds(543, 243, 117, 29);
contentPane.add(btnClear);
JButton btnProcess = new JButton("Process");
btnProcess.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
populate();
}
});
btnProcess.setBounds(414, 244, 117, 29);
contentPane.add(btnProcess);
}
public void populate()
{
String msg = "Error";
HomeImprovement[] homeImprove = new HomeImprovement[6];
double price [] = {500.99,33,90,1599,33,900};
int isWhat [] = {1,0,0,0,1,1};
homeImprove[0] = new TileInstaller("The Tile Guy\t");
homeImprove[1] = new Electrician("Electrons R Us\t");
homeImprove[2] = new HandyMan("Mr. Handy\t");
homeImprove[3] = new GeneralContractor("N.B.J. Inc.\t");
homeImprove[4] = new HandyMan("Mr. Handy(Tile)");
homeImprove[5] = new GeneralContractor("N.B.J. Inc.(Tile)");
for(int i=0; i<homeImprove.length; i++)
{
if ((isWhat[i] != 1))
{msg=homeImprove[i].doTheElectric();}
else
{msg=homeImprove[i].tileIt();}
String tmp = "Company: "+homeImprove[i].getCompanyName() + "\t" +
"Final Price: "+ homeImprove[i].computeBid(price[i]) + "\t" +
"msg: " + msg + "\n";
textField.setText(tmp);
}
}
}
答案 0 :(得分:3)
尝试使用摇摆工作者。这个runnable将在ui线程上执行并更新你的UI。
SwingWorker worker = new SwingWorker<ImageIcon[], Void>() {
private String populated = null;
@Override
public ImageIcon[] doInBackground() {
String populated = populate(); //but remove last line and return the result
}
@Override
public void done() {
textField.append( populated );
}
};
答案 1 :(得分:3)
你一直在覆盖字符串。
试试这个:
String tmp = "";
for(int i=0; i<homeImprove.length; i++)
{
if (isWhat[i] != 1)
{
msg = homeImprove[i].doTheElectric();
}
else
{
msg = homeImprove[i].tileIt();
}
tmp += "Company: "+homeImprove[i].getCompanyName() + "\t" +
"Final Price: "+ homeImprove[i].computeBid(price[i]) + "\t" +
"msg: " + msg + "\n";
}
textField.setText(tmp);
Btw:我建议改变你的编程风格(我猜你还在学习:-)),换行和缩进不会花费任何成本,并且在搜索错误时会有很多帮助。