日期:2014-05-20  浏览次数:20817 次

Java,两个JPanel之间怎么传值
初学Java,遇到点棘手的问题,求教各位大侠:

我做个了界面,里边包含了几个JPanel,每个Panel都有相应的控件。我想做这个一个操作:
即在Panel A里点击一个Button,会弹出一个对话框,然后会运行一个命令,我想把这个命令运行的结果在Panel B的JTextArea控件上显示出来。

想了几天了,也不知道该怎么处理!!!

Help!

------解决方案--------------------
我有一种思路,首先Panel B需要提供一个getTextArea()方法,以便程序能够获得相应的JTextArea对象,然后Panel A的构造函数里面加入一个Panel B的参数,最后就可以在button的事件中获得Panel B的JTextArea对象了

下面用个例子来表达我的思路
Java code

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里的,那么,你就可以随意的操作每个组件了