将JFrame.getText()从一个类成员传递给另一个?

时间:2013-05-29 13:14:02

标签: java swing interface constructor jtextfield

在这段代码中,我使用了所有扩展JPanel类的3个类,其实例被添加到JFrame类的构造函数中的JForm3

我想知道是否有办法在JTextField方法的TextPanel方法中显示文本字段中存在的文本(printTextOnConsole()类中声明的ButtonPanel的实例) }类。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JForm3 
{
    JFrame frame;
    ButtonPanel bP;
    TextPanel tP;
    LabelPanel lP;
    public JForm3()
    {
        frame = new JFrame("Java Window.");
        bP = new ButtonPanel();
        tP = new TextPanel();
        lP = new LabelPanel();

        frame.setSize(500,100);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.getContentPane().add(BorderLayout.CENTER,tP);
        frame.getContentPane().add(BorderLayout.EAST,bP);
        frame.getContentPane().add(BorderLayout.WEST,lP);

        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
    public static void main(String[] args)
    {
        new JForm3();
    }
}
class ButtonPanel extends JPanel implements ActionListener
{
    JButton quitButton;
    JButton printButton;
    public ButtonPanel()
    {
        quitButton = new JButton("Quit");
        printButton = new JButton("Print");

        quitButton.addActionListener(this);
        printButton.addActionListener(this);


        this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
        this.add(quitButton);
        this.add(printButton);
    }
    public void actionPerformed(ActionEvent event)
    {
        if(event.getSource() == quitButton)
            System.exit(0);
        else
            printTextOnConsole();
    }
    public void printTextOnConsole()
    {

    }
}
class LabelPanel extends JPanel
{
    JLabel label;
    public LabelPanel()
    {
        this.setLayout(new BorderLayout());
        label = new JLabel("Enter Some Text :");
        this.add(BorderLayout.CENTER,label);
        this.setVisible(true);
    }
}
class TextPanel extends JPanel
{
    JTextField textField;
    public TextPanel()
    {
        this.setLayout(new BorderLayout());
        textField = new JTextField("Enter text here");
        this.add(BorderLayout.CENTER,textField);
        this.requestFocus();
        textField.select(0,textField.getText().length());
        this.setVisible(true);
    }

}

1 个答案:

答案 0 :(得分:2)

使用界面在JPanels之间松散耦合文本功能。

interface TextRetriever {
   String getText();
}

然后将TextRetrieverTextPanel)的实例传递给ButtonPanel

class ButtonPanel extends JPanel implements ActionListener {
    private TextRetriever textRetriever;

    public ButtonPanel(TextRetriever textRetriever) {
       this.textRetriever = textRetriever
       ...
    }

    public void printTextOnConsole() {
        String text = textRetriever.getText();
    }
}