日期:2014-05-20 浏览次数:21008 次
import java.awt.*;
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;
}
}
------解决方案--------------------
A 和B 在同一个界面不好做吗? 把你要引用的组件定义成全局变量就可以了
还有一种方法:你可以自定义JPanel,让每个JPanel保持父对象如JFrame的引用,这样整个系统中的任意一个组件都可以访问到(要提供相应组件的getter)
------解决方案--------------------
楼主的几个panel是不是在同一个frame里?
如果是的,那个,你可以把frame作为panel构造方法中的一个参数传进去,赋给panel类里的一个frame成员变量,那么,你就可以操作frame里的变量了,而各个panel都是在frame里的,那么,你就可以随意的操作每个组件了