【问题标题】:GUI and application logic of WindowBuilder interaction java?WindowBuilder交互java的GUI和应用逻辑?
【发布时间】:2014-12-04 13:11:32
【问题描述】:

我有一个 MainWindow 类,它有 main 方法、它的构造函数和 initialize() 方法。 initialize() 方法有框架、Jbutton 和最终的Jtextarea。 actionPerformed() 在另一个处理 ActionListener 的数据类中。我想在 Jtextfield 中按下按钮后显示一些文本,它位于 MainWindow 类的唯一私有变量框架内。我没有提到应用程序逻辑,帮助我与它和 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);
        }
}

那么类Data就是:

    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;
    }

我只是想在MainWindow类中设置frame变量的JtextArea..请帮忙

【问题讨论】:

    标签: java jframe jtextarea windowbuilder


    【解决方案1】:

    如果我理解正确,您可以简单地将 TextArea 的引用通过 getter 或构造函数传递给您的 ActionListener。这里我只是用了getter

    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");
    }
    }
    

    并在 textarea 初始化后将这段代码添加到您的 initialize() 方法中

    this.data.setTextArea(textarea);

    希望对你有帮助。

    更新

    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;
    }
    }
    

    这只是一个简单的实现。

    【讨论】:

    • 我可以在我的 Data 类中设置 String ,但实际的问题是在 MainWindow 类的 JTextArea textarea 中返回该字符串并设置它。请帮助我返回那个 JTextArea 并添加到 MainWindow 类中的 JFrame 框架...谢谢!!!
    • 让我们想想。从逻辑上讲,ActionListener 将捕获您的操作并在 actionPerformed 中运行代码,因此如果您想在 MainWindow 中处理代码,则必须在 MainWindow 中创建一个方法并从 ActionListener 调用它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    相关资源
    最近更新 更多