首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过自定义按钮将数据从JDialog传递到帧

通过自定义按钮将数据从JDialog传递到帧
EN

Stack Overflow用户
提问于 2019-01-29 09:54:05
回答 3查看 663关注 0票数 1

我是新使用j对话框的swing,我一直在搜索,但是我似乎找不到使用自定义按钮的解决方案。我找到的唯一解决方案是使用他们内置的输入JDialog。但这不能解决我的问题。

我试图在单击“保存”后将数据(从对话框文本字段"hello“传递给父框架textField ),但无法传递。

有没有人面临同样的问题?有什么帮助吗?

代码语言:javascript
运行
复制
public class dataparse {

  String result;
  String inputValue;

public void mainFrame() {
    JFrame frame = new JFrame(" Parent Frame ");
    JPanel center = new JPanel();
    JButton enter = new JButton("Enter");
    // JLabel data = new JLabel("data is...");
    JTextField text = new JTextField();

    frame.setSize(400, 400);
    center.setLayout(new GridLayout(0, 1));
    center.add(text);
    center.add(enter);
    frame.add(center, BorderLayout.CENTER);

    enter.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            confirmDialog();
            text.setText(inputValue);

        }
    });

    frame.setVisible(true);

}


    private void confirmDialog(){
        JTextField output = new JTextField("Hellloooo");
        JButton save = new JButton("Save");


          JDialog customDialog = new JDialog();
          Container pane = customDialog.getContentPane();
          pane.setLayout(new GridLayout(0,1));

          pane.add(new JLabel("Startubg"));
          pane.add(output);
          pane.add(save);

          customDialog.setSize(300,400);

          customDialog.add(output);
          customDialog.add(save);

          customDialog.setVisible(true);

          save.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                result = output.getText();
            }
        });

    }

(预先谢谢:)

例如,我有两个类,我希望第二个类从第一个类调用dialog.dispose()。但是我不能叫这个方法,任何想法

main.java

代码语言:javascript
运行
复制
public JDialog dialogBox(){

    //JDialog dialog = new JDialog(frame, "Date picker", true);
    dialogButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            dialog = new JDialog(frame,"Date picker " , true);
            DatePicker_Demo picker = new DatePicker_Demo();
            dialog.setSize(500, 300);
            dialog.setLayout(new GridLayout(0,2));
            dialog.add(new DatePicker_Demo().addBtn());
            dialog.pack();
            dialog.setVisible(true);
        }
    });
    return dialog;
}

second.java

代码语言:javascript
运行
复制
public JButton addBtn(){
    JButton btn = new AddBills().exitBtn();
    btn.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            // TODO Auto-generated method stub
            new AddBills().dialogBox().dispose();
        }
    });

    return btn;
}
EN

回答 3

Stack Overflow用户

发布于 2019-01-29 09:59:45

将text.setText部件放入“保存”按钮的actionListener中有什么问题?

例如

代码语言:javascript
运行
复制
public void actionPerformed(ActionEvent arg0) {
        // TODO Auto-generated method stub
       result = output.getText();
       text.setText(result);
 }
票数 0
EN

Stack Overflow用户

发布于 2019-01-29 11:09:50

代码语言:javascript
运行
复制
public class Window extends JFrame {

private JPanel contentPane;
private JTextField txtField;
private JButton btnSave;
private static Window frame2; // making it static so i can work on it from main()
private static int num = 500;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Window frame1 = new Window();
                frame2 = new Window();
                frame1.setVisible(true);
                frame2.setVisible(true);
                frame2.txtField.setText("");// clear the text box of window 2
                frame2.setTitle("window 2");
                frame2.btnSave.setVisible(false); // won't see button on window 2
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public Window() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100 + num, 100, 506, 514);
    setTitle("window1");
    num += num; // so you can see both windows
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    txtField = new JTextField();
    txtField.setText("Hello");
    txtField.setBounds(39, 151, 376, 117);
    contentPane.add(txtField);
    txtField.setColumns(10);

    btnSave = new JButton("save");
    btnSave.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            String text = txtField.getText(); // get the text after save button was clicked.
            txtField.setText("");// clear textfield of window 1.
            frame2.txtField.setText(text); // set the text on textField of window 2
            setVisible(true); // update
            frame2.setVisible(true); // update
        }
    });
    btnSave.setBounds(169, 302, 115, 29);
    contentPane.add(btnSave);
    }
}

当然,您可以使它更OOP,但我想保持简单的形式,以便您可以看到它的全部。

票数 0
EN

Stack Overflow用户

发布于 2019-01-29 12:54:30

在下面的例子中,您可以这样做。我认为您在代码中遗漏的重要行是setModal(true);

没有setModal(true);行,执行将直接从confirmDialog();text.setText(inputValue);,而无需等待用户在对话框中输入文本。

代码语言:javascript
运行
复制
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class InputDialogExample {

  public static void main(String[] args) {

    JFrame frame = new JFrame("Frame");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JLabel label = new JLabel();

    JButton openDialogButton = new JButton("Open Dialog");
    openDialogButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        CustomDialog dialog = new CustomDialog(frame);
        dialog.setVisible(true);
        label.setText(dialog.getValue());
      }
    });

    frame.getContentPane().setLayout(new GridLayout(2, 1));
    frame.getContentPane().add(label);
    frame.getContentPane().add(openDialogButton);
    frame.setBounds(300, 200, 400, 300);
    frame.setVisible(true);
  }
}

class CustomDialog extends JDialog {

  private String value;

  CustomDialog(Frame owner) {

    super(owner, "Dialog");

    setModal(true); // This is the important line

    JTextField textField = new JTextField();

    JButton okButton = new JButton("OK");
    okButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        value = textField.getText();
        setVisible(false);
      }
    });

    getContentPane().setLayout(new GridLayout(2, 1));
    getContentPane().add(textField);
    getContentPane().add(okButton);
    setBounds(500, 400, 300, 200);
  }

  String getValue() {
    return value;
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54418274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档