【问题标题】:Populating JList,attribute of class with JFrame from a JDialog使用 JDialog 中的 JFrame 填充 JList,类的属性
【发布时间】:2013-09-01 18:30:51
【问题描述】:

我有一个 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);

DialogWindow.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?例如jlist.add(value) 等
  • 在MainWindow 中你有LoginDialog loginDlg = new LoginDialog(mainForm,jList);,但是你向我们展示的LoginDialog 构造函数只接受一个单个 参数。那到底是哪条路呢?
  • jlist.add(value),在 JDialog 关闭后,如何从 JDialog 获取列表的值?我的 MainForm 只是调用 LoginDialog 类的构造函数。
  • 我刚刚编辑过。我正在尝试一些东西,但它肯定被留在了那里。
  • mainForm 到底是什么?

标签: java swing jlist


【解决方案1】:

只需将您的 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。

【讨论】:

    猜你喜欢
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2012-01-14
    • 1970-01-01
    相关资源
    最近更新 更多