Итак, основываясь на том, что вы, кажется, делают в коде, я настоятельно рекомендую вам взглянуть на 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);
}
}
Теперь я получаю ...
Хорошо, но теперь есть две кнопки, и если пользователь не нажимает среднюю кнопку, текст никогда не устанавливается!
Дело в том, что для этой вещи вам не нужна кнопка! Вам просто нужен метод, который может вернуть текущий текст JTextField
, например ...
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);
}
}
И тогда я могу использовать ...
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);
}
}
}
, чтобы показать !
я настоятельно рекомендую вам взять время, чтобы посмотреть на Laying Out Components Within a Container
Вы думали о добавлении экземпляра 'Start' вас существующий контейнер? Может быть, с помощью «CardLayout»? Вы думали о создании нового 'JFrame' и добавлении своего экземпляра' Start' к нему или, возможно, использования 'JDialog'? – MadProgrammer
Я хотел попробовать добавить экземпляр Start в Jframe, но я не уверен в переходе с одного jframe на другой. Я попробую добавить его в существующий контейнер. –