drücke Ich habe Knopf mit seinem Listener erstellt und dann drücke ich Knopf, öffnet meinen spezifizierten JFrame. Das Problem ist, dass ich dann diesen JFrame schließe und zum zweiten Mal auf die Schaltfläche klicke, um JFrame erneut zu öffnen. Es erstellt meinen JFrame erneut. Kann jemand erklären, wie man diese Art von Situation vermeidet?Lassen Sie JFrame nicht jedes Mal neu erstellen, wenn ich den Knopf
(Was ich will, ist, dass jedes Mal, wenn ich meine JFrame auf dem Knopf wieder öffnen klicken, um es von dort nur kontinuierliche ich meine JFrame links, nicht nur immer und immer wieder neu zu erstellen)
P. S. Mein Code, wenn jemand interessiert ist. Es ist sehr einfach. Hier, wie Sie sehen können, ist meine Taste Listener und dann drücke ich es JFrame zu erstellen, wie ich schon sagte. Ich habe diesen Code nur für jemanden hinzugefügt, der sich für Java interessiert und mehr Erklärungen benötigt. Aber mein Hauptproblem ist oben :)
b2.addActionListener(new ActionListener() {
JTextField molecname = new JTextField("Molecule name", 20);
Connection conn = null;
ResultSet resultSet;
SwingJList<String> myJList2;
Statement stat;
JButton searchButton = new JButton("Search");
JScrollPane listScrollPane;
JSplitPane splitPane;
JPanel searchPane;
GridLayout searchPane2;
JList list;
JLabel molLabel;
@Override
public void actionPerformed(ActionEvent event) {
molLabel = new JLabel("Molecule name:");
molecname.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
molecname.setText("");
}
});
try {
conn = DriverManager.getConnection(db.getMolecule().getDBLink(), props);
if (conn != null) {
DatabaseMetaData metadata = conn.getMetaData();
List<String[]> sqltable = new ArrayList<>();
try {
String[] types = {"TABLE"};
resultSet = metadata.getTables(null, null, "%", types);
while (resultSet.next()) {
//tableName = resultSet.getString(3);
tableName = (tableName == null) ? resultSet.getString(3) : tableName + "." + resultSet.getString(3);
//sqltable.add(new String[]{tableName});
}
} catch (SQLException ex) {
Logger.getLogger(JFDatabase.class.getName()).log(Level.SEVERE, null, ex);
}
for (String[] tablename : sqltable) {
System.out.println(Arrays.toString(tablename));
System.out.println(Arrays.asList(tablename));
}
String[] LIST_DATA4 = tableName.split(Pattern.quote("."));
myJList2 = new SwingJList<>(Arrays.asList(LIST_DATA4));
myJList2.addListSelectionListener((ListSelectionEvent e2) -> {
if (!e2.getValueIsAdjusting()) {
String selectedName = myJList2.getSelectedValue();
molecname.setText(selectedName);
}
});
stat = conn.createStatement();
searchButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
molecname.getText();
String molname1 = molecname.getText();
props.put("molname", molname1);
try {
String[] types = {"TABLE"};
ResultSet resultSet = metadata.getTables(null, null, molname1, types);
if (resultSet.next()) {
System.out.println("Egzistuoja");
ResultSet resset = stat.executeQuery("SELECT * FROM " + molname1 + "");
ResultSetMetaData metadata = resset.getMetaData();
int columnCount = metadata.getColumnCount();
System.out.println("Table columns : ");
for (int i = 1; i <= columnCount; i++) {
String columnName = metadata.getColumnName(i);
System.out.println(columnName);
}
}
} catch (SQLException ex) {
Logger.getLogger(JFDatabase.class.getName()).log(Level.SEVERE, null, ex);
}
frame2.dispose();
}
});
list = new JList(sqltable.toArray());
list.setCellRenderer(f);
listScrollPane = new JScrollPane(myJList2);
listScrollPane.setPreferredSize(new Dimension(250, 200));
listScrollPane.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "List", TitledBorder.CENTER, TitledBorder.TOP));
searchPane = new JPanel();
searchPane2 = new GridLayout(15, 3);
searchPane.setLayout(searchPane2);
splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, listScrollPane, searchPane);
searchPane.add(molLabel);
searchPane.add(molecname);
searchPane.add(searchButton);
frame2.add(splitPane);
frame2.pack();
frame2.setLocationRelativeTo(null);
frame2.setVisible(true);
JOptionPane.showMessageDialog(null,
"Database connected",
"Warning", JOptionPane.INFORMATION_MESSAGE);
System.out.println("You made it, take control your database now!");
} else {
JOptionPane.showMessageDialog(null,
"Database connection not avaible",
"Warning", JOptionPane.WARNING_MESSAGE);
System.out.println("Failed to make connection!");
}
} catch (SQLException e3) {
JOptionPane.showMessageDialog(null,
"Database connection not avaible",
"Warning", JOptionPane.WARNING_MESSAGE);
System.err.print(e3);
}
}
});
Das liegt daran, dass Sie den Rahmen beim Klicken auf die Schaltfläche erstellen. Erstelle es einfach im Voraus und setze die Sichtbarkeit auf "True"/"False", wenn du auf " – Bene
" klickst. Aber meine Varibale, mit der ich klarkomme, wird nicht an JFrame übergeben :( –