많은 추가 매개 변수를 입력하기 위해 하나의 기본 JFrame과 하나의 추가 JFrame이 있습니다. 따라서, 두 번째 jframe이 주 jframe ("저장"버튼의 ActionListener 사용)으로 데이터를 반환해야하지만, 어떻게 할 수 있는지 알지 못합니다. 제발, 도와주세요. 당신이 나를 도울 수 있기를 바랍니다. 고맙습니다.모달 JFrame 또는 다른 JComponent를 만드는 방법은 무엇입니까?
2
A
답변
5
두 번째 종속 창을 JFrame으로 만들지 마십시오. 대신 모달 JDialog 또는 JOptionPane을 사용하십시오. 많은 것은 JOptionPane가 GUI를 보관 유지하는 JPanel를 JOptionPane에 배치하는 것으로, JOptionPane가 복잡한 GUI를 보관할 수있는 것을 인식하지 않습니다. 예를 들어
:
당신이 모달 할 때 JFrame의보다 JDialog를 사용하는 것이 좋습니다import java.awt.*;
import java.awt.event.*;
import java.util.HashMap;
import java.util.Map;
import javax.swing.*;
@SuppressWarnings("serial")
public class ComplexOptionPane extends JPanel {
private PlayerEditorPanel playerEditorPanel = new PlayerEditorPanel();
private JTextArea textArea = new JTextArea(12, 30);
public ComplexOptionPane() {
textArea.setEditable(false);
textArea.setFocusable(false);
textArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 16));
JPanel bottomPanel = new JPanel();
bottomPanel.add(new JButton(new AbstractAction("Get Player Information") {
@Override
public void actionPerformed(ActionEvent arg0) {
int result = JOptionPane.showConfirmDialog(null, playerEditorPanel,
"Edit Player JOptionPane", JOptionPane.OK_CANCEL_OPTION,
JOptionPane.PLAIN_MESSAGE);
if (result == JOptionPane.OK_OPTION) {
for (PlayerEditorPanel.FieldTitle fieldTitle : PlayerEditorPanel.FieldTitle
.values()) {
textArea.append(String.format("%10s: %s%n",
fieldTitle.getTitle(),
playerEditorPanel.getFieldText(fieldTitle)));
}
}
}
}));
setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
setLayout(new BorderLayout(5, 5));
add(new JScrollPane(textArea), BorderLayout.CENTER);
add(bottomPanel, BorderLayout.PAGE_END);
}
private static void createAndShowGui() {
ComplexOptionPane mainPanel = new ComplexOptionPane();
JFrame frame = new JFrame("ComplexOptionPane");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
@SuppressWarnings("serial")
class PlayerEditorPanel extends JPanel {
enum FieldTitle {
NAME("Name"), SPEED("Speed"), STRENGTH("Strength"), HEALTH("Health");
private String title;
private FieldTitle(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
};
private static final Insets WEST_INSETS = new Insets(5, 0, 5, 5);
private static final Insets EAST_INSETS = new Insets(5, 5, 5, 0);
private Map<FieldTitle, JTextField> fieldMap = new HashMap<FieldTitle, JTextField>();
public PlayerEditorPanel() {
setLayout(new GridBagLayout());
setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("Player Editor"),
BorderFactory.createEmptyBorder(5, 5, 5, 5)));
GridBagConstraints gbc;
for (int i = 0; i < FieldTitle.values().length; i++) {
FieldTitle fieldTitle = FieldTitle.values()[i];
gbc = createGbc(0, i);
add(new JLabel(fieldTitle.getTitle() + ":", JLabel.LEFT), gbc);
gbc = createGbc(1, i);
JTextField textField = new JTextField(10);
add(textField, gbc);
fieldMap.put(fieldTitle, textField);
}
}
private GridBagConstraints createGbc(int x, int y) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.anchor = (x == 0) ? GridBagConstraints.WEST : GridBagConstraints.EAST;
gbc.fill = (x == 0) ? GridBagConstraints.BOTH
: GridBagConstraints.HORIZONTAL;
gbc.insets = (x == 0) ? WEST_INSETS : EAST_INSETS;
gbc.weightx = (x == 0) ? 0.1 : 1.0;
gbc.weighty = 1.0;
return gbc;
}
public String getFieldText(FieldTitle fieldTitle) {
return fieldMap.get(fieldTitle).getText();
}
}
7
관련 문제
- 1. 모달 JFrame을 만드는 방법은 무엇입니까?
- 2. JFrame 배열을 만드는 방법은 무엇입니까?
- 3. 모달 창을 만드는 방법은 무엇입니까?
- 4. JTextPane에 텍스트와 JComponent를 세로로 가운데에 배치하는 방법은 무엇입니까?
- 5. jQgrid가있는 모달 팝업을 만드는 방법은 무엇입니까?
- 6. WPF에서 모달 대화 상자를 만드는 방법은 무엇입니까?
- 7. JavaScript를 사용하여 모달 팝업을 만드는 방법은 무엇입니까?
- 8. JComponent를 기본값으로 재설정
- 9. jtextfield의 변수를 다른 JFrame/클래스의 다른 변수로 전달하는 방법은 무엇입니까?
- 10. JFrame 또는 클래스 개체?
- 11. 다른 모달 JDialog 위에 모달 JDialog를 만드는 방법
- 12. 다른 메서드에서 다른 JFrame 닫기
- 13. Jframe 또는 JPanel을 사용하여 JScrollPane의 테두리를 고정하는 방법은 무엇입니까?
- 14. 다른 JFrames 생성자에서 JFrame 만들기
- 15. 다른 클래스 사용하기 JFrame
- 16. 다른 JFrame에서 JFrame 호출
- 17. 다른 JFrame에 JFrame 할당하기
- 18. 다른 목적으로보기를 만드는 방법은 무엇입니까?
- 19. JFrame 창을 극대화하는 다른 방법은 무엇입니까? 사람들이 말해 모든 곳
- 20. 텍스트 파일 (또는 다른 문서) 파서를 만드는 방법은 무엇입니까?
- 21. iPhone에서 전체 화면 모달 상태 표시를 만드는 방법은 무엇입니까?
- 22. 데이터를로드하는 것을 의미하는 작은 투명 모달 오버런을 만드는 방법은 무엇입니까?
- 23. 사용자 정의 JComponent를 표시하는 데 문제가 발생했습니다.
- 24. JFrame 또는 JPanel에서 자바 스크립트를로드하십시오.
- 25. 하나의 JFrame 내에서 JPanels로 전환하는 방법은 무엇입니까?
- 26. Meego에서 모달 페이지 위로 슬라이드를 만드는 방법은 무엇입니까?
- 27. jQuery를 통해 모달 윈도우에서이 기능을 만드는 방법은 무엇입니까?
- 28. jQuery 모달 오버레이를 100 % 투명하게 만드는 방법은 무엇입니까?
- 29. JFrame을 다른 프로세스에 삽입 JFrame
- 30. 다른 클래스에서 가져온 JFrame/JPanel