Передача данных из JDialog во фрейм кнопкой настройки - PullRequest
0 голосов
/ 29 января 2019

Я новичок в работе с jdialog, я искал повсюду, но не могу найти решение, использующее пользовательскую кнопку.Единственное решение, которое я нашел, было использование их встроенного ввода JDialog.Но это не решает мою проблему.

Я пытаюсь передать данные (из текстового поля Dialog "привет" в родительский фрейм textField после нажатия кнопки "Сохранить"), но не могу это сделать.

Кто-нибудь сталкивался с такой же проблемой?Любая помощь?

enter image description here

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

    }

Заранее спасибо:)

Для примера у меня есть 2 класса, и я хочувторой класс для вызова dialog.dispose () из первого класса.но я не могу вызвать метод, любые идеи

main.java

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

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

Ответы [ 3 ]

0 голосов
/ 29 января 2019
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);
    }
}

Конечно, вы можете сделать его более ООП, но я хотел, чтобы все было просто в одной форме, чтобы вы могли видеть все это.

0 голосов
/ 29 января 2019

Вы можете сделать это как в примере ниже.Я думаю, что важная строка, которую вы пропускаете в своем коде, это setModal(true);.

Без строки setModal(true); выполнение будет напрямую переходить с confirmDialog(); на text.setText(inputValue);, не дожидаясь ввода пользователем текста вдиалог.

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 голосов
/ 29 января 2019

Что не так с размещением части text.setText внутри actionListener вашей кнопки «Сохранить»?

например

public void actionPerformed(ActionEvent arg0) {
        // TODO Auto-generated method stub
       result = output.getText();
       text.setText(result);
 }
...