我用它的监听器创建了按钮然后按下按钮它打开我指定的JFrame。问题是,然后我关闭那个JFrame并再次点击按钮再次重新打开JFrame它再次创建我的JFrame。有人可以解释如何避免这种情况吗?
(我想要的是每次我在按钮上重新打开我的JFrame时,只需从那里连续离开我的JFrame,而不是一遍又一遍地重新创建它)
P.S。我的代码,如果有人感兴趣。这很简单。在这里,你可以看到我的按钮监听器,然后我按它创建JFrame,因为我之前告诉过。我刚刚为那些对Java感兴趣并想要更多解释的人添加了这段代码。但我的主要问题如上所述:)
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);
}
}
});
答案 0 :(得分:1)
观察:
您在评论中说明:
但我处理该按钮点击的varibale将不会传递给JFrame
但这没有意义。请解释一下。
关于需要发送到此窗口(或任何其他窗口)的任何数据
其他问题