您如何在不在 java 中创建新实例的情况下引用您的 GUI?
How do you reference your GUI without creating a new instance in java?
您好,我的程序有问题,我找不到答案。基本上我已经很努力了,Whosebug 是我最后的希望.....我想我明白了这个问题,但不知道如何解决它......
所以我有一个 GUI,上面有一个 JCalendar。我想根据用户的选择在每周计划数据库中创建一个新的 table。但是,当我将用户选择的日期发送到方法时,它会将日期重置回当前日期。我 99% 确定这是因为我每次 运行 使用此方法时都会创建一个新的 gui 实例。 (我自学了java两个半月所以不是高手)
无论如何,我的问题是如何在 gui 中引用方法 getSelectedDate 而不必创建 gui 的新实例?????我已经查看了我能找到的所有教程等,但还没有任何帮助我......
如有任何意见建议,将不胜感激......再次感谢......
public void createSchedule() {
try {
this.doConnect();
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
SchedulerGUI gui = new SchedulerGUI();
Calendar cal = Calendar.getInstance();
cal.setTime(gui.getSelectedDate());
int WeekNum = cal.get(Calendar.WEEK_OF_YEAR);
int year = cal.get(Calendar.YEAR);
String DatabaseString = "CREATE TABLE " + Integer.toString(year) + "_week_" + Integer.toString(WeekNum) + " (PeriodNum INT DEFAULT 1 NOT NULL, Monday VARCHAR(30), Tuesday VARCHAR(30), Wednesday VARCHAR(30), Thursday VARCHAR(30), Friday VARCHAR(30), Saturday VARCHAR(30), Sunday VARCHAR(30), PRIMARY KEY (PeriodNum))";
System.out.println(DatabaseString);
// stmt.executeUpdate(DatabaseString); ------- I have this //'d out so that I'm not creating a new table every time a new weeks starts. So I don't jump for joy thinking I've fixed it! :)
} catch (SQLException ex) {
Logger.getLogger(Methods.class.getName()).log(Level.SEVERE, null, ex);
JOptionPane.showMessageDialog(null, "This schedule already exists. Please update it or select another week.");
} finally{
try {
con.close();
stmt.close();
} catch (SQLException ex) {
Logger.getLogger(Methods.class.getName()).log(Level.SEVERE, null, ex);
}
我不确定我是否完全理解上下文,但我相信您正在创建 Java 对象日历的实例,它不是 GUI 对象。
您是否尝试过引用现有的 JCalendar GUI 对象?看起来您引用了某种 GUI,但我不太确定那是 JCalendar。
要直接回答您的问题,对 gui
的引用应该是 class createSchedule()
所属的任何成员。如果 GUI 创建此对象,它可以传递对自身的引用。确保它仅在其构造函数 returns 之后执行此操作;否则你会从构造函数中泄漏 this
,这很糟糕。
一种更复杂的方法是让 GUI 传入 SwingPropertyChangeSupport 的实例。您的程序逻辑会将 属性 事件注入其中,GUI 会监听它们并自行更新。
基本上,更改 createSchedule
方法,这样您就必须将它需要的信息传递给它,它会传回您需要的信息(如果需要)
public void createSchedule(Date date) {
try (Connection con = doConnect()) {
try (Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE)) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int WeekNum = cal.get(Calendar.WEEK_OF_YEAR);
int year = cal.get(Calendar.YEAR);
String DatabaseString = "CREATE TABLE " + Integer.toString(year) + "_week_" + Integer.toString(WeekNum) + " (PeriodNum INT DEFAULT 1 NOT NULL, Monday VARCHAR(30), Tuesday VARCHAR(30), Wednesday VARCHAR(30), Thursday VARCHAR(30), Friday VARCHAR(30), Saturday VARCHAR(30), Sunday VARCHAR(30), PRIMARY KEY (PeriodNum))";
stmt.executeUpdate(DatabaseString);
}
} catch (SQLException ex) {
Logger.getLogger(Methods.class.getName()).log(Level.SEVERE, null, ex);
JOptionPane.showMessageDialog(null, "This schedule already exists. Please update it or select another week.");
}
此外,请查看 The try-with-resources Statement 以获得更好的资源管理方法
您好,我的程序有问题,我找不到答案。基本上我已经很努力了,Whosebug 是我最后的希望.....我想我明白了这个问题,但不知道如何解决它......
所以我有一个 GUI,上面有一个 JCalendar。我想根据用户的选择在每周计划数据库中创建一个新的 table。但是,当我将用户选择的日期发送到方法时,它会将日期重置回当前日期。我 99% 确定这是因为我每次 运行 使用此方法时都会创建一个新的 gui 实例。 (我自学了java两个半月所以不是高手)
无论如何,我的问题是如何在 gui 中引用方法 getSelectedDate 而不必创建 gui 的新实例?????我已经查看了我能找到的所有教程等,但还没有任何帮助我......
如有任何意见建议,将不胜感激......再次感谢......
public void createSchedule() {
try {
this.doConnect();
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
SchedulerGUI gui = new SchedulerGUI();
Calendar cal = Calendar.getInstance();
cal.setTime(gui.getSelectedDate());
int WeekNum = cal.get(Calendar.WEEK_OF_YEAR);
int year = cal.get(Calendar.YEAR);
String DatabaseString = "CREATE TABLE " + Integer.toString(year) + "_week_" + Integer.toString(WeekNum) + " (PeriodNum INT DEFAULT 1 NOT NULL, Monday VARCHAR(30), Tuesday VARCHAR(30), Wednesday VARCHAR(30), Thursday VARCHAR(30), Friday VARCHAR(30), Saturday VARCHAR(30), Sunday VARCHAR(30), PRIMARY KEY (PeriodNum))";
System.out.println(DatabaseString);
// stmt.executeUpdate(DatabaseString); ------- I have this //'d out so that I'm not creating a new table every time a new weeks starts. So I don't jump for joy thinking I've fixed it! :)
} catch (SQLException ex) {
Logger.getLogger(Methods.class.getName()).log(Level.SEVERE, null, ex);
JOptionPane.showMessageDialog(null, "This schedule already exists. Please update it or select another week.");
} finally{
try {
con.close();
stmt.close();
} catch (SQLException ex) {
Logger.getLogger(Methods.class.getName()).log(Level.SEVERE, null, ex);
}
我不确定我是否完全理解上下文,但我相信您正在创建 Java 对象日历的实例,它不是 GUI 对象。
您是否尝试过引用现有的 JCalendar GUI 对象?看起来您引用了某种 GUI,但我不太确定那是 JCalendar。
要直接回答您的问题,对 gui
的引用应该是 class createSchedule()
所属的任何成员。如果 GUI 创建此对象,它可以传递对自身的引用。确保它仅在其构造函数 returns 之后执行此操作;否则你会从构造函数中泄漏 this
,这很糟糕。
一种更复杂的方法是让 GUI 传入 SwingPropertyChangeSupport 的实例。您的程序逻辑会将 属性 事件注入其中,GUI 会监听它们并自行更新。
基本上,更改 createSchedule
方法,这样您就必须将它需要的信息传递给它,它会传回您需要的信息(如果需要)
public void createSchedule(Date date) {
try (Connection con = doConnect()) {
try (Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE)) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int WeekNum = cal.get(Calendar.WEEK_OF_YEAR);
int year = cal.get(Calendar.YEAR);
String DatabaseString = "CREATE TABLE " + Integer.toString(year) + "_week_" + Integer.toString(WeekNum) + " (PeriodNum INT DEFAULT 1 NOT NULL, Monday VARCHAR(30), Tuesday VARCHAR(30), Wednesday VARCHAR(30), Thursday VARCHAR(30), Friday VARCHAR(30), Saturday VARCHAR(30), Sunday VARCHAR(30), PRIMARY KEY (PeriodNum))";
stmt.executeUpdate(DatabaseString);
}
} catch (SQLException ex) {
Logger.getLogger(Methods.class.getName()).log(Level.SEVERE, null, ex);
JOptionPane.showMessageDialog(null, "This schedule already exists. Please update it or select another week.");
}
此外,请查看 The try-with-resources Statement 以获得更好的资源管理方法