我正在创建一个跟踪DVD列表的程序。在主页面上,我设置了2个JButtons。当用户单击一个表示新的JFrame时,另一个类的新JFrame会显示输入新DVD信息的字段。我正在尝试在第二帧上创建一个取消按钮,以便当单击取消按钮时,它会重新启动主GUI并关闭新的条目GUI。代码如下,我无法弄清楚如何去做。
主GUI页面
package dvdlibrary;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
public class bootPage extends javax.swing.JFrame {
/** Creates new form bootPage */
public bootPage() {
initComponents();
}
@SuppressWarnings("unchecked")
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
jLabel1.setText("DVD Library");
getContentPane().add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(168, 11, -1, -1));
jLabel2.setText("What would you like to do today?");
getContentPane().add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(113, 70, -1, -1));
jButton1.setText("Create Record");
jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jButton1MouseClicked(evt);
}
});
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
getContentPane().add(jButton1, new org.netbeans.lib.awtextra.AbsoluteConstraints(50, 135, -1, -1));
jButton2.setText("View Library");
jButton2.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jButton2MouseClicked(evt);
}
});
getContentPane().add(jButton2, new org.netbeans.lib.awtextra.AbsoluteConstraints(224, 135, 111, -1));
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
}
private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
if(evt.getSource()== jButton1)
dvdlibrary.createEntry.createE();
}
private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {
if(evt.getSource()== jButton2)
dvdlibrary.movieChooser.movChoo();
}
public static void bootP() {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new bootPage().setVisible(true);
new bootPage().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
}
创建条目页
package dvdlibrary;
public class createEntry extends javax.swing.JFrame {
public createEntry() {
initComponents();
}
@SuppressWarnings("unchecked")
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jComboBox1 = new javax.swing.JComboBox();
jTextField2 = new javax.swing.JTextField();
jTextField3 = new javax.swing.JTextField();
jTextField4 = new javax.swing.JTextField();
jScrollPane1 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
jButton4 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setText("Title");
jLabel2.setText("Genre");
jLabel3.setText("Length");
jLabel4.setText("Rating");
jLabel5.setText("Description");
jLabel6.setText("Year");
jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jScrollPane1.setViewportView(jTextArea1);
jButton1.setText("Input");
jButton2.setText("Load");
jButton3.setText("Save");
jButton4.setText("Cancel");
jButton4.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jButton4MouseClicked(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(19, 19, 19)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel5)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 174, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel3)
.addComponent(jLabel4)
.addComponent(jLabel6))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 32, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jTextField2)
.addComponent(jTextField4)
.addComponent(jTextField3, javax.swing.GroupLayout.DEFAULT_SIZE, 133, Short.MAX_VALUE)))))
.addGroup(layout.createSequentialGroup()
.addGap(51, 51, 51)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(124, 124, 124)
.addComponent(jButton1))
.addGroup(layout.createSequentialGroup()
.addGap(45, 45, 45)
.addComponent(jButton4)
.addGap(18, 18, 18)
.addComponent(jButton2)
.addGap(18, 18, 18)
.addComponent(jButton3)))
.addGap(23, 23, 23))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(38, 38, 38)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton1))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(26, 26, 26)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel6)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(29, 29, 29)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(37, 37, 37)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel4)
.addComponent(jTextField4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(39, 39, 39)
.addComponent(jLabel5)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton3)
.addComponent(jButton2)
.addComponent(jButton4)))
.addContainerGap())
);
pack();
}
private void jButton4MouseClicked(java.awt.event.MouseEvent evt) {
}
public static void createE() {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new createEntry().setVisible(true);
}
});
}
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JButton jButton4;
private javax.swing.JComboBox jComboBox1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
private javax.swing.JTextField jTextField4;
// End of variables declaration
}
答案 0 :(得分:14)
我认为你也可以使用DISPOSE_ON_CLOSE:
DISPOSE_ON_CLOSE(默认值为 的JInternalFrame)
当用户关闭窗口时隐藏和处理窗口。这删除 屏幕上的窗口可以释放它使用的任何资源。
答案 1 :(得分:6)
您是否阅读过API以找出setDefaultCloseOperation(...)方法的其他值?
您可以使用:
DISPOSE_ON_CLOSE - 框架将关闭。如果这是应用程序的最后一个打开框架,那么JVM也将终止
HIDE_ON_CLOSE - 框架只是设置为不可见。
当用户点击一个说新的时,另一个类的新jframe会出现输入新DVD信息的字段。
程序的真正问题在于您使用框架作为弹出窗口。你应该使用模态JDialog。应用程序应该只有一个带有多个对话框的JFrame来收集其他信息。 JDialog不允许您使用EXIT_ON_CLOSE。
答案 2 :(得分:2)
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE)
答案 3 :(得分:1)
我遇到了类似的问题,并使用jFrameInstanceVariable.setVisible(false);
作为我按下CANCEL按钮时发生的操作。但每次我点击之后弹出JFrame的按钮时,除了按下按钮创建的新内容之外,所有旧内容仍然存在。
我通过在每次按下弹出JFrame的按钮时创建一个新的JFrame实例来修复此问题。
答案 4 :(得分:1)
要隐藏窗口而不实际关闭程序,请执行以下操作:
f.setVisible(false);
答案 5 :(得分:1)
如果是这种情况,请确保在初始化时在JFrame上使用setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
,而不是setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
答案 6 :(得分:1)
如果您只是隐藏程序,使用HIDE_ON_CLOSE
或set.Visible(false)
,这不是一个很好的选择,因为如果您使用更多帧执行更大的操作,隐藏的帧仍将运行,从而减慢速度降低电脑性能。正如其他人所说的,这种方式不是使用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
,而是在点击&#34; X,关闭所有帧时终止程序,使用以下内容:
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
答案 7 :(得分:0)
如果您使用的按钮就像我认为您说的那样
this.dispose();
会做的伎俩..
答案 8 :(得分:0)
尝试将this.dispose();
置于取消按钮方法中。