我在JFrame上有一个按钮,当单击时我想要一个弹出的对话框,其中有多个文本区域供用户输入.我一直在四处寻找如何做到这一点,但我一直在变得更加困惑.有人可以帮忙吗?
我创建了一个模态JDialog框,其上有一个自定义绘图和一个JButton.当我单击JButton时,JDialog框应该关闭,并且应该返回一个值.
我在父JFrame中创建了一个名为setModalPiece的函数,它接收一个值并将其设置为本地JFrame变量.
问题是从JDialog框中看不到此函数(即使JDialog框具有对父JFrame的引用).
两个问题:1)有没有更好的方法将值从JDialog框返回到其父JFrame?
2)为什么不能使用传递给JDialog的JFrame的引用来访问我的JFrame函数setModalPiece?
有没有办法通过代码关闭JDialog,以便仍然会通知Window事件监听器?我试过将可见设置为假和处理,但似乎都没有.
我正试图JDialog
在Windows中显示一个.如何在我的Windows任务栏上显示JDialog
(喜欢JFrame
)?
a JFrame
和a有JDialog
什么区别?
为什么我们不能setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);
用于JDialog?
当用户单击JDialog上的按钮时,我无法将JComponents添加到JDialog.基本上我希望它看起来像这样:
然后,当用户点击"添加新字段"时,我希望它看起来像这样:
我似乎无法获得添加新JLabel或JTextField的对话框.谁能指出我正确的方向?
编辑:这是"添加新字段"按钮的操作(现在只是尝试标签).
@Action
public void addNewField()
{
Container contentPane = getContentPane();
JLabel label = new JLabel ("welkom");
contentPane.add(label, BorderLayout.CENTER);
}
Run Code Online (Sandbox Code Playgroud)
解决方案:
我使用了mre的解决方案并让它工作.这是我的最终功能:
@Action
public void addNewField()
{
System.out.println("New Field...");
Container contentPane = getContentPane();
JLabel label = new JLabel ("welcome");
label.setBounds(10,10,100,10); //some random value that I know is in my dialog
contentPane.add(label);
contentPane.validate();
contentPane.repaint();
this.pack();
}
Run Code Online (Sandbox Code Playgroud)
我的另一个问题是我在NetBeans中使用"自由设计"布局,这意味着我的标签可能处于一些奇怪的位置而不是在我的对话框中(只是一个猜测).我解决了这个问题,label.setBounds()
以便它显示我想要的确切位置.
我想在JDialog的底部添加一个按钮(JButton),按下时应关闭JDialog.问题是我不知道在该按钮的ActionListener中写什么.我不希望按钮退出程序,只需关闭对话框.
JDialog是通过显式调用JDialog的一个构造函数创建的,而不是通过调用JOptionPane中的一个方法来创建的.
我非常惊讶于我无法使用Google找到答案.我预计很多编程站点都会广泛涵盖经常遇到的问题.很奇怪,事实并非如此.
在对话框上使用setVisible(false)并在以后重用它是否有意义,或者每次调用dispose()更安全并创建一个新的JDialog.如何使用setVisible(false)进行内存泄漏?
编辑:我的问题不在于退出应用程序.有关将主框架作为父框架并在应用程序生命周期内打开和关闭的对话框的更多信息.例如,假设我的应用程序有大约10个对话框,每次打开它们时都会显示不同的数据.我应该重用实例并使用setVisible(),还是应该每次都创建一个新的Dialog并在关闭时处理它们.
我有一个Java应用程序,显示数据库中的列表.在类的内部是以下代码,用于打开数据输入的新对话框:
@Action
public void addNewEntry() {
JFrame mainFrame = ADLog2App.getApplication().getMainFrame();
addNewDialog = new AddNewView(mainFrame, true);
addNewDialog.setLocationRelativeTo(mainFrame);
addNewDialog.addContainerListener(null);
ADLog2App.getApplication().show(addNewDialog);
}
Run Code Online (Sandbox Code Playgroud)
如何向主类添加侦听器以检测addNewDialog窗口何时关闭,以便我可以调用刷新方法并从数据库中刷新列表.
我发现当我在Java swing应用程序中显示一个JDialog
或一个新的时JFrame
,我将在Windows 7中将我的中文输入法从半字节模式切换到全字节模式.
为什么调用对话框或框架setVisible(true)
方法来切换我的IME设置?
有谁知道代码有什么问题,或者它是Java的错误?
重现问题的过程:
我的语言设置
我发现了一个类似的问题,通过Java中的Windows 7输入法自动切换字符宽度
并且在添加默认语言环境后,它仍然无法正常工作
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Locale;
public class MainWindow {
private JFrame frame;
private Locale l;
/**
* Create the application.
*/
public MainWindow() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
l = new Locale("zh", …
Run Code Online (Sandbox Code Playgroud)