2014-12-04 99 views
0

我有一个MainWindow类,它有main方法,它的构造函数和initialize()方法。 initialize()方法有框架,Jbutton和最终的Jtextarea。 actionPerformed()在处理ActionListener的另一个类Data中。我想在Jtextfield中按下按钮之后显示一些文本,该文本仅位于MainWindow类的专用变量框架内。我没有提到应用程序逻辑,帮助我与它交互,并且GUI。谢谢!!!! !WindowBuilder交互java的GUI和应用程序逻辑?

MainWindow类:

public class MainWindow { 
    private JFrame frame; 
    public Data data; 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        MainWindow window = new MainWindow(); 
        window.frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    public MainWindow() { 
     this.data = new Data(); 
     initialize(); 
    } 

    private void initialize(){ 

     frame = new JFrame(); 
     frame.setBounds(100, 100, 396, 469); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout(null); 

     final JTextArea textarea = new JTextArea(); 
     textarea.setFont(new Font("Dialog", Font.PLAIN, 75)); 
     textarea.setTabSize(15); 
     textarea.setBounds(12, 28, 370, 85); 
     frame.getContentPane().add(textarea); 

     JButton button7 = new JButton("7"); 
     button7.addActionListener(this.data); // Data data class has the actionperformed() method 
     button7.setActionCommand("7"); 
     button7.setBounds(12, 125, 65, 73); 
     frame.getContentPane().add(button7); 
     } 
} 

那么类数据是:

public class Data implements ActionListener { 

    public String s; 

    public Data(){ 
     //constructor 
    } 

    public void actionPerformed(ActionEvent e) { 
      // this will set string s with some string 
      // that has to be returned to be displayed 
      // in the Jtextarea of the frame in MainWindow 
    } 

    public string returnString(){ 
      return s; 
    } 

我只是想设置主窗口框架变量的JTextArea class..please帮助

回答

0

如果我理解正确,您可以简单地通过getter或构造函数将TextArea的引用传递给ActionListener。 textarea的初始化

this.data.setTextArea(文本域)后,在这里,我只是用吸气

public class Data implements ActionListener { 
public JTextArea textArea; 

public Data() { 
    //constructor 
} 

// here I used setter 
public void setTextArea(JTextArea textArea) { 
    this.textArea = textArea; 
} 

public void actionPerformed(ActionEvent e) { 
    // this will work, if you click the button 7 
    textArea.setText("Any modification you want"); 
} 
} 

而在你的初始化添加此代码()方法;

希望它有帮助。

UPDATE

public class MainWindow { 
private JFrame frame; 
public Data data; 

final JTextArea textarea; 

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       MainWindow window = new MainWindow(); 
       window.frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

public class Data implements ActionListener { 

public String s; 
public MainWindow mainWindow; 

public Data(MainWindow mainWindow) { 
    this.mainWindow = mainWindow; 
    //constructor 
} 

public void actionPerformed(ActionEvent e) { 
    s = "test"; 
    // this will set string s with some string 
    // that has to be returned to be displayed 
    // in the Jtextarea of the frame in MainWindow 
    mainWindow.updateTextArea(s); 
} 

public String returnString() { 
    return s; 
} 
} 

这仅仅是一个简单的实现。

+0

我能够在我的数据类中设置字符串,但实际的问题是在MainWindow类的JTextArea textarea中返回字符串并将其设置。请帮助我返回JTextArea并添加到MainWindow类中的JFrame框架......谢谢! – 2014-12-04 14:01:43

+0

让我们来思考。从逻辑上讲,ActionListener会捕获你的动作并在actionPerformed中运行一个代码,因此如果你想在MainWindow中处理代码,那么你必须在MainWindow中创建一个方法并从ActionListener **中调用它。 – larensolarsuss 2014-12-05 10:07:56