初学Java,遇到点棘手的问题,求教各位大侠:我做个了界面,里边包含了几个JPanel,每个Panel都有相应的控件。我想做这个一个操作:
即在Panel A里点击一个Button,会弹出一个对话框,然后会运行一个命令,我想把这个命令运行的结果在Panel B的JTextArea控件上显示出来。想了几天了,也不知道该怎么处理!!!Help!
即在Panel A里点击一个Button,会弹出一个对话框,然后会运行一个命令,我想把这个命令运行的结果在Panel B的JTextArea控件上显示出来。想了几天了,也不知道该怎么处理!!!Help!
解决方案 »
- JAVA高手请进,小弟有事相求
- GUI窗口设计中的文本事件处理中的小问题
- java -classpath 问题
- 把字符串中的全角英文字母替换成半角的英文字母的最好方法?
- 怎么画布还不走
- jsp中出现com.microsoft.sqlserver.jdbc.SQLServerException: 没有为参数号 3 设置值。是怎么回事
- 请问如何获得java的帮助文件阿!在没有ide的情况下怎么办啊??
- 省级电力营销、客服中心??
- 字符串替换处理问题???谢谢
- 关于Swing中的JTabbedPane的一个问题
- 新手提问 如何让字符串中的指定内容全部高亮显示
- xp系统下, 已经关联了javaw.exe 和 jar, 为什么打不开?
在Panel A里点击一个Button,会弹出一个对话框,然后会运行一个命令,我想把这个命令运行的结果 s
jta.setText(s);
import java.awt.event.*;
import javax.swing.*;public class TestFrame extends JFrame
{
public TestFrame()
{
TestPanelB panelB = new TestPanelB();
TestPanelA panelA = new TestPanelA(panelB);
setLayout(new BorderLayout());
add(panelB, BorderLayout.CENTER);
add(panelA, BorderLayout.SOUTH);
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame frame = new TestFrame();
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
}
}class TestPanelA extends JPanel
{
private JButton button = new JButton("Set Text");
public TestPanelA(final TestPanelB panelB) //构造函数添加一个Panel B参数
{
add(button);
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
panelB.getTextArea().setText("Hello, World!"); //直接对Panel B对象的JTextArea进行操作
}
});
}
}class TestPanelB extends JPanel
{
private JTextArea text = new JTextArea(10, 40);
public TestPanelB()
{
add(text);
}
public JTextArea getTextArea() //提供获取JTextArea的函数
{
return text;
}
}
如果是的,那个,你可以把frame作为panel构造方法中的一个参数传进去,赋给panel类里的一个frame成员变量,那么,你就可以操作frame里的变量了,而各个panel都是在frame里的,那么,你就可以随意的操作每个组件了
jta.setText(s);
静态变量能够保存Panel B的改变的值,但是静态变量的一个缺点是,我不能从Panel B的事件去触发。
遇到一个新的问题:在你这个程序基础之上,我在按键上添加了一个执行.exe程序的功能,用Runtime中的exec方法,这个被执行的.exe执行时间很长,我启用了另外一个线程获取.exe执行的InputStream和ErrorStream,然后将取得的结果result直接通过 panelB.getTextArea().setText(result);语句设置panel,panel并不会更新,只有在.exe执行结束后才能刷新。这个要怎么样才能解决呢?
谢谢!