mr.*_*ing 6 java swing jdialog
我正在尝试使用windowBuilder创建自定义JDialog,但在一开始我遇到了一些问题.所以他们在这里:
我使用windowBuilder创建了简单的Jdialog.这是代码:
public class GroupFrame extends JDialog {
private final JPanel contentPanel = new JPanel();
/**
* Launch the application.
*/
public static void main(String[] args) {
try {
GroupFrame dialog = new GroupFrame();
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the dialog.
*/
public GroupFrame() {
setBounds(100, 100, 450, 300);
getContentPane().setLayout(new BorderLayout());
contentPanel.setLayout(new FlowLayout());
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
getContentPane().add(contentPanel, BorderLayout.CENTER);
{
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
getContentPane().add(buttonPane, BorderLayout.SOUTH);
{
JButton okButton = new JButton("OK");
okButton.setActionCommand("OK");
buttonPane.add(okButton);
getRootPane().setDefaultButton(okButton);
}
{
JButton cancelButton = new JButton("Cancel");
cancelButton.setActionCommand("Cancel");
buttonPane.add(cancelButton);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但后来我想将public static void main(String [] args)更改为public void show().
新的show()方法代码是:
public void show() {
try {
GroupFrame dialog = new GroupFrame();
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
因此,当我使用以下代码调用此更改的方法时:
GroupFrame groupFrame = new GroupFrame();
groupFrame.show();
Run Code Online (Sandbox Code Playgroud)
我有StackOverflowError(真是巧合!; D):
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at sun.awt.Win32GraphicsConfig.getBounds(Native Method)
at sun.awt.Win32GraphicsConfig.getBounds(Unknown Source)
at java.awt.Window.init(Unknown Source)
at java.awt.Window.<init>(Unknown Source)
at java.awt.Window.<init>(Unknown Source)
at java.awt.Dialog.<init>(Unknown Source)
at java.awt.Dialog.<init>(Unknown Source)
at javax.swing.JDialog.<init>(Unknown Source)
at javax.swing.JDialog.<init>(Unknown Source)
at javax.swing.JDialog.<init>(Unknown Source)
at UILayer.GroupFrame.<init>(GroupFrame.java:32)
at UILayer.GroupFrame.show(GroupFrame.java:21)
at java.awt.Component.show(Unknown Source)
at java.awt.Component.setVisible(Unknown Source)
at java.awt.Window.setVisible(Unknown Source)
at java.awt.Dialog.setVisible(Unknown Source)
at UILayer.GroupFrame.show(GroupFrame.java:23)
at java.awt.Component.show(Unknown Source)
at java.awt.Component.setVisible(Unknown Source)
at java.awt.Window.setVisible(Unknown Source)
at java.awt.Dialog.setVisible(Unknown Source)
at UILayer.GroupFrame.show(GroupFrame.java:23)
(etc...)
Run Code Online (Sandbox Code Playgroud)
谁能指出我做错了什么?
提前致谢!
您构造一个 GroupFrame,然后调用 show() 方法,该方法构造另一个 GroupFrame。这已经是错误的了。但它更错误,因为然后你调用setVisible(true)它在内部调用show()你无意中覆盖的方法。
show 方法应该命名为其他名称,并且应该是静态的:
public static GroupFrame createAndShow() {
GroupFrame dialog = new GroupFrame();
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)
因此,该方法将被称为:
GroupFrame.createAndShow();
Run Code Online (Sandbox Code Playgroud)
请不要捕获异常。当你这样做时,不要吞下异常。
| 归档时间: |
|
| 查看次数: |
4459 次 |
| 最近记录: |