Я строю свой первый gui, и до сих пор все работает нормально, за исключением неисправности с JDialog
. Он принимает список имен и процессов соответственно при первом использовании. Но когда я вывожу его обратно, чтобы войти в новый вход, он остается нерешенным. Я не думаю, что это проблема нити, поскольку я тестировал код, используя несколько операторов System.out.println (SwingUtilities.isEventDispatchThread());
по всему исходному коду. Вот часть кода, из-за которого может возникнуть проблема.JDialog не обновляется для нового ввода
package testme;
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Test {
JDialog dialog;
JButton horseList, ok, clear;
JPanel jpDialog = new JPanel();
JPanel buttonPanel = new JPanel();
GridBagLayout gbLayout = new GridBagLayout();
BorderLayout borderLayout = new BorderLayout();
GridBagConstraints gbc = new GridBagConstraints();
int fnh = 8;
JTextField[] jtxt = new JTextField[fnh];
int[] hNum = new int[fnh];
int[] hVal = new int[fnh];
String[] hNam = new String[fnh];
JFrame jfr = new JFrame();
public Test() {
jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jfr.setTitle("My Alladin Lamp");
jfr.setSize(200, 80);
jfr.setVisible(true);
jfr.setLayout(borderLayout);
horseList = new JButton("Enter Horse Names");
jfr.add(horseList, BorderLayout.CENTER);
horseList.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dialog = new JDialog(jfr, "Enter Horse Names", true);
dialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
dialog.setSize(260, 400);
jpDialog.setLayout(gbLayout);
JLabel label;
String str;
for(int i = 0; i < fnh; i++)
{
gbc.gridx = 0;
gbc.gridy = i;
str = new Integer(i+1) + ".";
label = new JLabel(str);
jpDialog.add(label, gbc);
gbc.gridx = 1;
gbc.gridy = i;
gbc.ipady = 4;
gbc.insets = new Insets(4,0,0,0);
jtxt[i] = new JTextField(15);
jpDialog.add(jtxt[i], gbc);
}
buttonPanel = new JPanel();
ok = new JButton("OK");
ok.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for(int i = 0; i < fnh; i++) {
hNam[i] = jtxt[i].getText();
}
dialog.dispose();
}
});
buttonPanel.add(ok);
clear = new JButton ("CLEAR");
clear.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for(int i = 0; i < fnh; i++)
if (!"".equals(jtxt[i].getText()))
jtxt[i].setText("");
}
});
buttonPanel.add(clear);
JScrollPane jscr = new JScrollPane(jpDialog);
dialog.add(jscr, BorderLayout.CENTER);
dialog.add(buttonPanel, BorderLayout.SOUTH);
dialog.setVisible(true);
}
});
}
// -------------------------------------------------------------------------
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run()
{
Test test = new Test();
}
});
}
}
Если ответ Джина не решает проблему, а затем рассмотреть вопрос о создании и проводке [sscce] (HTTP: // sscce.org), небольшая компилируемая и исполняемая программа, в которой мы можем работать без изменений и которая демонстрирует вашу проблему для нас. –