Witam
To jest dalsza cześć moich problemów dotyczących http://4programmers.net/Forum/viewtopic.php?id=157666
Przed umieszczeniem danych z JTextField w bazie danych, chciałem móc "je uzyskać" choćby do tego aby móc sprawdzić czy będą mieścić się w założonym przeze mnie zakresie. Ale nie mogę nawet odczytać ich w oknie dialogowym, a co dopiero sprawdzić. Może ktoś mi powie dlaczego? Będę jak zawsze bardzo wdzięczny za każdą pomoc.
Oto kod:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.*;
public class Baza_wypelnianie {
private JPanel mainPanel = new JPanel();
private JTextField textFields = new JTextField();
ActionListener listener;
private JTextField infoTxt=new JTextField();
private JButton tabInfo = new JButton("Info");
String[] arr = new String [10];
Connection conn,conn2 = null;
Statement stmt,stmt2 = null;
ResultSet rs,rs2 = null;
public static Connection getConnection() throws Exception {
String driver = "org.apache.derby.jdbc.ClientDriver";
String url = "XXXX";
String username = "XX";
String password = "XX";
Class.forName(driver);
return DriverManager.getConnection(url, username, password);
}
public Baza_wypelnianie() {
JPanel fieldPanel = new JPanel(new GridLayout(2,2, 10, 10));
FocusListener focusListener = new MyFocusAdapter();
try {
conn = getConnection();
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
try{
String query2 = "SELECT * FROM TEST";
rs = stmt.executeQuery(query2);
ResultSetMetaData md = rs.getMetaData();
int col = md.getColumnCount();
rs.next();
for (int i = 1; i < col+1; i++)
{
String textFieldName = rs.getString(i);
textFields = new JTextField(5);
textFields.setName(md.getColumnName(i));
textFields.addFocusListener(focusListener);
JLabel label = new JLabel(textFieldName);
JPanel p = new JPanel();
p.add(label);
p.add(textFields);
textFields.addActionListener(listener);
fieldPanel.add(p);
}
}
catch (SQLException s){
System.out.println("SQL statement is not executed!");
}
infoTxt.setEditable(false);
infoTxt.setFocusable(false);
mainPanel.setLayout(new BorderLayout());
mainPanel.add(fieldPanel, BorderLayout.NORTH);
JPanel southPanel=new JPanel();
southPanel.setLayout(new GridLayout(1,2));
southPanel.add(infoTxt);
southPanel.add(tabInfo);
mainPanel.add(southPanel, BorderLayout.CENTER);
tabInfo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String s= textFields.getText();
//juz poprawione, ale tak czy inaczej tutaj właśnie coś jest nie tak!
JOptionPane.showMessageDialog(null, s, "Wpisano", JOptionPane.INFORMATION_MESSAGE);;
}
});
}
catch (Exception e) {
e.printStackTrace();
System.exit(1);
} finally {
// release database resources
try {
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public JComponent getPanel() {
return mainPanel;
}
private class MyFocusAdapter extends FocusAdapter {
public void focusGained(FocusEvent e) {
infoTxt.setText(((JTextField) e.getSource()).getName());
}
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("Test Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new Baza_wypelnianie().getPanel());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
Pobieranie nazwy JTextField, oraz nazwy z pierwszego wiersza bazy danych jako tekstu JLabel - działa, a chciałbym jeszcze żeby sprawdzało czy wpisana wartość w JTextField jest większa od wartości z wiersza drugiego bazy danych a mniejsza niż wartość w wierszu trzecim. Stąd muszę nauczyć się wydostawać wartości z JTextField które wpisał użytkownik.
samo getText() wyświetla jedynie puste okno dialogowe,
a ((JTextField) e.getSource()).getText() zgłasza błąd.