、あなたのコードでやっているように見えるものに基づいて、I How to Make Dialogsをご覧になることを強くお勧めします。その主な理由は、モーダルダイアログは、ダイアログが表示されるポイントでプログラムの実行を停止させ、閉じたときに再開して、ユーザーが変更した可能性のある値を調べることができます。
私が最初にあなたのプログラムが動作するように取得しようとしたときに、これは何が起こったのかです...
だから、あなたのコードに掘った後、私はあなたがsetLayout(null);
をしたい気づきました。これはあなたを迎えに戻ってくるつもりです。あなたはこれをやめ、レイアウト管理APIの使い方を学ぶことを強くお勧めします。
だから、私はあなたのコードに飛び込んだとレイアウトマネージャを追加...
public class Start extends JPanel {
public String getTxt;
public Start() {
final JTextField jf = new JTextField(20);
final JButton j1 = new JButton("OK");
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
add(jf, gbc);
add(j1, gbc);
j1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
getTxt = jf.getText();
System.out.println(getTxt);
}
});
}
public static void main(String[] args) {
JFrame f = new JFrame("Interest");
f.getContentPane().add(new Start());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setPreferredSize(new Dimension(310, 250));
f.setMaximumSize(new Dimension(310, 250));
f.setMinimumSize(new Dimension(310, 250));
f.pack();
f.setVisible(true);
}
}
は、今私は...
オーケーを取得し、今2つのボタンがありますし、ユーザーが中央のボタンをクリックしない限り、テキストは決して設定されません!
実際、この種のものでは、ボタンは必要ありません。それを表示するために
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new GridBagLayout());
JButton btn = new JButton("Surprise");
add(btn);
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Start start = new Start();
JOptionPane.showMessageDialog(TestPane.this, start, "Surprise", JOptionPane.PLAIN_MESSAGE);
System.out.println(start.getText());
}
});
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
}
...あなただけの
public class Start extends JPanel {
final JTextField jf = new JTextField(20);
public Start() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
add(jf, gbc);
}
public String getText() {
return jf.getText();
}
public static void main(String[] args) {
JFrame f = new JFrame("Interest");
f.getContentPane().add(new Start());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setPreferredSize(new Dimension(310, 250));
f.setMaximumSize(new Dimension(310, 250));
f.setMinimumSize(new Dimension(310, 250));
f.pack();
f.setVisible(true);
}
}
...例えば、JTextField
の現在のテキストを返すことができる方法を必要とする。そして、私は使用することができます!
私は強くあなたがLaying Out Components Within a Container
を見てに時間がかかることをお勧めしますが、 'Start'あなた既存のコンテナのインスタンスを追加する方法について考えたことはありますか?おそらく 'CardLayout'を使用していますか?新しい 'JFrame'を作成し、そのインスタンスに' Start'のインスタンスを追加するか、 'JDialog'を使用することを考えましたか? – MadProgrammer
私はJframeでStartインスタンスを追加しようとしましたが、あるフレームから別のフレームに移動することについてはわかりません。既存のコンテナに追加しようと思います。 –