gpt4 book ai didi

Java Swing - 如何使关闭对话框不会关闭整个程序?

转载 作者:行者123 更新时间:2023-12-02 13:27:21 26 4
gpt4 key购买 nike

对于某些类(class)作业,我必须使用 swing 制作一个浏览器并实现多个功能,例如书签功能。我在这里想做的是为新窗口创建一个类,该窗口显示我存储的书签的下拉菜单。

我在这里使用了一个对话框,因为我不希望窗口有一个最小化按钮,但是,当您关闭对话框时,整个程序都会关闭(实际的浏览器 JFrame 和程序中的其他所有内容)。

我已将 Dlg 框的 setDefaultCloseOperation 设置为 DISPOSE_ON_CLOSE 但它似乎不起作用,我也尝试简单地隐藏该框。

这是我的代码,想知道我是否做错了什么,或者只是对话框的工作原理。干杯

import java.awt.BorderLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;

public class SeeBookmarks extends JFrame {

private JComboBox<String> seeBookmarks = new JComboBox<String>(); //Drop down box for the bookmarks

public SeeBookmarks(BrowserPane screen, JButton seeBookmarksBtn) throws IOException {
Dlg bookmarksFrame = new Dlg(new JFrame(), "Bookmarks"); //Dialog box (Replacement JFrame)

try {
Scanner bookmarks = new Scanner(new FileReader("bookmarks.txt")); //Read the bookmarks file
while (bookmarks.hasNextLine()) { //While the file has another bookmark line
seeBookmarks.addItem(bookmarks.nextLine()); // add it to the drop down box
}
bookmarks.close(); //Close file reader
} catch (FileNotFoundException fnfe) { //In case file does not exist
FileWriter bookmarks = new FileWriter("bookmarks.txt"); //Create an empty bookmarks file
bookmarks.close(); //Close file writer
}

seeBookmarks.addItemListener(new ItemListener() { //Listener for the bookmarks drop down box
public void itemStateChanged(ItemEvent item) {
if (item.getStateChange() == ItemEvent.SELECTED) { //If an item is selected
screen.search(seeBookmarks.getSelectedItem().toString(), true); // Search selected item, add to history
bookmarksFrame.dispose(); // Close Dialog box
seeBookmarksBtn.setEnabled(true); // Re-enable seeBookmarksBtn
}
}
});

bookmarksFrame.setLayout(new BorderLayout()); //Set Dialog box to Border layout
bookmarksFrame.add(seeBookmarks, BorderLayout.CENTER); //Display drop down box in center for dialog box

bookmarksFrame.pack();
bookmarksFrame.setSize(300, 70);
bookmarksFrame.setLocationRelativeTo(null);
bookmarksFrame.setVisible(true);
bookmarksFrame.setDefaultCloseOperation(Dlg.DISPOSE_ON_CLOSE); //Meant to dispose the Dialog box
bookmarksFrame.setResizable(false);
bookmarksFrame.setAlwaysOnTop(true);
}

}

最佳答案

I used a dialog box here

使用对话框是正确的。一般来说,一个应用程序应该只有一个 JFrame 来控制该应用程序,然后您可以使用子窗口的对话框。

关闭 JDialog 不会关闭应用程序,除非应用程序中没有其他 Activity 框架。请注意,该对话框甚至没有用于设置默认关闭操作的“EXIT”选项。所以问题出在代码执行方式的上下文中。

您发布的代码并没有真正的帮助:

  1. 我们不知道 Dlg 类是什么。如果你想使用 JDialog,那么只需创建一个 JDialog 即可。

  2. 您的类不需要扩展 JFrame。

  3. 我们不知道该对话框代码实际上是如何调用的。也许您在其他类中有导致应用程序关闭的代码?

  4. pack() 和 setVisible() 应该是在将所有组件添加到对话框并设置所有对话框属性后执行的最后两个语句。例如,将对话框设置为不可调整大小将更改边框的大小,从而更改对话框的大小。

关于Java Swing - 如何使关闭对话框不会关闭整个程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43330699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com