多くの追加パラメータを入力するために、1つのメインJFrameと1つの追加JFrameがあります。だから、私は2番目のjframeがメインのjframeにデータを返す必要がある( "Save"ボタンのActionListenerを使う)が、どうすればいいのか分からない。してください、私に助けてくれることを願ってください。ありがとうございました。モーダルJFrameまたは別のJComponentを作成するには?
2
A
答えて
5
2番目の従属ウィンドウをJFrameにしないでください。代わりにモーダルJDialogまたはJOptionPaneを使用してください。 JOptionPaneがGUIを保持するJPanelをJOptionPaneに配置するだけで、JOptionPanesが複雑なGUIを保持できることは多くの人が気づいていません。例えば
:
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
あなたがモーダルたいときのJFrameよりもJDialogを使用することをお勧めします。
HERE is a great Example showing the Modality of the JDIalog.
関連する問題
- 1. Jframeから別のJframeにオブジェクトを転送する方法は?
- 2. Java:GUIの作成。 JFrameのインポートまたは拡張?
- 3. JFrame配列の作成方法は?
- 4. あるモーダルから別のモーダルにデータを送信する
- 5. 1つのJFrameから別のJFrameに変数を渡すには
- 6. MDIを作成するときは、JDesktopPaneまたはJFrameを使用する必要があります
- 7. JPanelまたはJFrameをクリア
- 8. 別のパッケージのJFrameの中でJDialogを使用するには?
- 9. ランタイム中に動的にJComponentを生成
- 10. アプリケーションの2番目の部分にコメントを作成するためのレールフォームを作成する(モーダル)
- 11. モーダルから別のナビゲーションコントローラに移動するには?
- 12. JFrameまたはClassオブジェクト?
- 13. リストタイプを動的に作成する(または別のコレクションですか?)
- 14. twitterブートストラップを使用してモーダル内にモーダルを作成する必要があります
- 15. Androidは1つのディレクトリにファイルを作成するのではなく、別のディレクトリに作成します
- 16. 別のモデルを作成する際にモデルを作成するためのベストプラクティス
- 17. JFrameを別のプロセスに組み込むJFrame
- 18. Jarは作成したコンピュータではなく、別のコンピュータで動作します
- 19. JFrameウィンドウを最大化する別の方法は?
- 20. 処理中にモーダルJDialogを作成する
- 21. 私のアプリケーションは、Azureに別のSQLデータベースを作成します。
- 22. java netbeansアプリケーションにJFrameまたはJDialogを追加する
- 23. JPanelを自動生成されたnetbeans JFrameに追加するには?
- 24. JFrameまたはJPanel内でjavacをロード
- 25. 2番目のモーダルを閉じた後、モーダルをモーダルで使用し、スクロールはボディを指します
- 26. Veil LoadingImageまたはLoading JFrame上のパネル
- 27. 別のエンハンサーまたはCglibAopProxyによって生成されたプロキシでエンハンサーを作成する
- 28. JFrameボタンをNetbeansの別のJFrameクラスを開くにはどうすればいいですか?
- 29. モーダルのイメージを作成するにはどうすればいいですか?モーダルのリンクは画像そのものです(小さいバージョンの場合)
- 30. Pythonの特別なIDは、メニューにヘルプセクションを作成したい