从JDialog中用JFrame填充类的JList属性



我有一个MainForm类,它扩展了JFrame并在其中有一个JList。

现在,点击一个按钮,就会弹出一个JDialog,输入凭据,然后下载一个要填充在父窗口Jlist中的值列表。

现在,如何从子类填充mainForm属性?

MainForm.java

public class MainForm extends JFrame {
static MainForm mainForm;
public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            mainForm = new MainForm();
            mainForm.setVisible(true);
        }
    });
}
    public MainForm() {
               loadUI();
    }
    private void loadUI() {
    JPanel panel = new JPanel();
    getContentPane().add(panel);
            final JList<String> jList = new JList<String>();
            final JButton settings = new JButton(settingImage);
    settings.setBorder(new EmptyBorder(3, 0, 3, 0));
    settings.setBounds(50, 60, 100, 30);
    vertical.add(settings);
    settings.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
             LoginDialog loginDlg = new LoginDialog(mainForm);
             loginDlg.setVisible(true);
             // if logon successfully
             if(loginDlg.isSucceeded()){
                 settings.setText("Hi " + loginDlg.getUsername() + "!");
             }
        }
    });
            add(vertical, BorderLayout.WEST);
    add(jList, BorderLayout.CENTER);

对话框窗口.java

    public LoginDialog(final Frame parent) {
    super(parent, "Login", true);
    //
    JPanel panel = new JPanel(new GridBagLayout());
    //some more lines of code
    btnLogin.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
               ftpAuthenticationVO.setIp(urlIP.getText());
                    ftpAuthenticationVO.setUsername(tfUsername.getText());
                    ftpAuthenticationVO.setPassword(pfPassword.getText());
                    FileUtils.saveFTPDetails(ftpAuthenticationVO);
                    if(ftpConnect.startFTP(CommonConstants.TEMP_TXT_FILE));
                    {
                        List<String> list = readSplitTextFiles.readTextFile(CommonConstants.TEMP_TXT_FILE);
                    //This is the value that is to be populated in the Jlist inside the parent window.  
                    }

只需将JList作为MainForm 的属性

public class MainForm extends JFrame {
private JList jlist;
.
.
.
private void loadUI() {
    JPanel panel = new JPanel();
    getContentPane().add(panel);
    jList = new JList<String>();
    final JButton settings = new JButton(settingImage);
    settings.setBorder(new EmptyBorder(3, 0, 3, 0));
    settings.setBounds(50, 60, 100, 30);
    vertical.add(settings);
    .
    .
}

public void setJListModel(List<String> list){
   jlist.setModel(new Vector(list));
}
}

在JDialog 中

 public void actionPerformed(ActionEvent e) {
               ftpAuthenticationVO.setIp(urlIP.getText());
                    ftpAuthenticationVO.setUsername(tfUsername.getText());
                    ftpAuthenticationVO.setPassword(pfPassword.getText());
                    FileUtils.saveFTPDetails(ftpAuthenticationVO);
                    if(ftpConnect.startFTP(CommonConstants.TEMP_TXT_FILE));
                    {
                        List<String> list = readSplitTextFiles.readTextFile(CommonConstants.TEMP_TXT_FILE);
 (MainForm)parent.setJListModel(list);
                    }

此外,父级必须声明为final

最新更新