WindowBuilder 交互 java 的 GUI 和应用程序逻辑



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

类:

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

我只想在 MainWindow 类中设置框架变量的 JtextArea。请帮忙

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

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

并在文本区域初始化后将此代码添加到您的 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;
}
}

这只是一个简单的实现。

最新更新