>  기사  >  Java  >  다음은 기사의 핵심을 포착하는 몇 가지 질문 기반 제목입니다. * Java Swing에서 JFrame과 JDialog 사이에 값을 전달하는 방법은 무엇입니까? * 하위 창에서 데이터 검색: JFrames, JDialogs,

다음은 기사의 핵심을 포착하는 몇 가지 질문 기반 제목입니다. * Java Swing에서 JFrame과 JDialog 사이에 값을 전달하는 방법은 무엇입니까? * 하위 창에서 데이터 검색: JFrames, JDialogs,

Barbara Streisand
Barbara Streisand원래의
2024-10-26 19:50:30437검색

Here are a few question-based titles that capture the essence of the article:

* How to Pass Values Between JFrames and JDialogs in Java Swing?
* Retrieving Data from Child Windows: JFrames, JDialogs, and Table Models in Java Swing
* Mastering Communicati

JFrame 간 값 전달

프로그램 디자인 이해

처음에 두 개의 JFrame을 사용한다고 언급하셨지만 디자인에는 하나의 JFrame(frame1)이 포함된 것으로 보입니다. 그리고 검색 결과를 표시하기 위한 JDialog입니다. JDialog는 상위 창에 종속되므로 이러한 구별이 중요합니다.

참조 전달

JFrame 및 JDialog를 포함한 GUI 개체 간에 참조를 전달하려면 표준 Java 참조를 사용할 수 있습니다. 한 창이 다른 창을 열 때 상위 창은 일반적으로 하위 창에 대한 참조를 유지하고 해당 창에 대한 메서드를 호출할 수 있습니다.

적절한 시간에 데이터 검색

하위 창에서 데이터를 검색할 시기 결정 창은 유형에 따라 다릅니다.

  • 모달 대화 상자: 모달 대화 상자가 반환되면 대화 상자를 표시한 직후의 코드가 상태를 검색하기에 이상적인 시간입니다.
  • 비모달 대화 상자: 비모달 대화 상자의 경우 정보를 추출할 시기를 결정하기 위해 리스너를 사용해야 할 수도 있습니다.

다음은 다음과 같습니다. 프레임1의 버튼으로 JDialog를 열고 프레임1의 JTextField를 JDialog의 JTextField에 입력된 텍스트로 채우는 간단한 예는 다음과 같습니다.

<code class="java">import java.awt.Window;
import java.awt.Dialog.ModalityType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class WindowCommunication {

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(() -> createAndShowUI());
    }

    private static void createAndShowUI() {
        JFrame frame1 = new JFrame("frame1");
        MyFramePanel panel1 = new MyFramePanel();
        frame1.getContentPane().add(panel1);
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame1.pack();
        frame1.setLocationRelativeTo(null);
        frame1.setVisible(true);
    }

    static class MyFramePanel extends JPanel {

        private JTextField textField;
        private JButton openDialogButton;

        private JDialog dialog;
        private MyDialogPanel dialogPanel;

        public MyFramePanel() {
            textField = new JTextField(10);
            textField.setEditable(false);
            textField.setFocusable(false);

            openDialogButton = new JButton("Open Dialog");
            openDialogButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    openDialogAction();
                }
            });

            add(textField);
            add(openDialogButton);
        }

        private void openDialogAction() {
            if (dialog == null) {
                Window win = SwingUtilities.getWindowAncestor(this);
                if (win != null) {
                    dialog = new JDialog(win, "My Dialog",
                            ModalityType.APPLICATION_MODAL);
                    dialogPanel = new MyDialogPanel();
                    dialog.getContentPane().add(dialogPanel);
                    dialog.pack();
                    dialog.setLocationRelativeTo(null);
                }
            }
            dialog.setVisible(true);

            // Here, after the modal dialog is disposed, the text from the
            // dialog's JTextField is retrieved and set into this JDialog's JTextField.
            textField.setText(dialogPanel.getFieldText());
        }
    }

    static class MyDialogPanel extends JPanel {

        private JTextField textField;
        private JButton okButton;

        public MyDialogPanel() {
            textField = new JTextField(10);

            okButton = new JButton("OK");
            okButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    okButtonAction();
                }
            });

            add(textField);
            add(okButton);
        }

        public String getFieldText() {
            return textField.getText();
        }

        private void okButtonAction() {
            Window win = SwingUtilities.getWindowAncestor(this);
            if (win != null) {
                win.dispose();
            }
        }
    }
}</code>

JTable에서 데이터를 검색하려면 유사한 기술을 사용할 수 있습니다. 하지만 테이블 행 선택과 같은 추가 요소를 고려해야 할 수도 있습니다.

위 내용은 다음은 기사의 핵심을 포착하는 몇 가지 질문 기반 제목입니다. * Java Swing에서 JFrame과 JDialog 사이에 값을 전달하는 방법은 무엇입니까? * 하위 창에서 데이터 검색: JFrames, JDialogs,의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.