我有一个带JDesktopPane的JFrame,在JDesktopPane中,我使用构造函数启动一个JInternalFrame。 (它的应用程序类似于身份验证用户,文本框用户和文本框通过)
我喜欢这样的内部:
MyInternalFrame internalF = new MyInternalFrame();
desktopPane.add(internalF);
我尝试:
internalF.setVisible(true);
internalF.setSelected(true);
desktopPane.getDesktopManager().activateFrame(internal);
desktopPane.setSelectedFrame(internal);
我如何能够默认选择JInternalFrame及其选中? 当我运行应用程序时,内部框架就像在后台,它没有被选中,它没有聚焦。
答案 0 :(得分:1)
查看How To Use Internal Frames java教程。它给出了一个很好的例子并使用了以下内容;
protected void createFrame() {
MyInternalFrame frame = new MyInternalFrame();
frame.setVisible(true);
desktop.add(frame);
try {
frame.setSelected(true);
} catch (java.beans.PropertyVetoException e) {}
}
答案 1 :(得分:0)
您可以在创建桌面后显示内部框架,并且主框架可见。在这种情况下,默认情况下会选择框架。
所以,你可以做的一个例子是:
在这种情况下,内部框架将出现在桌面上,并将根据需要进行选择。
您可能会想到不使用线程的其他解决方案,而是将处理程序写入主框架的事件。在任何情况下,为了使内部框架在显示后可见,您必须在显示主框架的桌面后显示它。
以下是您可以使用的示例:
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.HeadlessException;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
public class Main extends JFrame {
private static final long serialVersionUID = 1L;
private Internal internalFrame;
public Main() throws HeadlessException {
super("Internal Frame Test");
setBounds(10, 10, 600, 400);
setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLayout(new BorderLayout());
add(createDesktop(), BorderLayout.CENTER);
addWindowListener(new WindowAdapter() {
public void windowOpened(WindowEvent e) {
internalFrame.setVisible(true);
}
});
setVisible(true);
}
private Component createDesktop() {
JDesktopPane d = new JDesktopPane();
internalFrame = new Internal("first");
d.add(internalFrame);
return d;
}
public static class Internal extends JInternalFrame {
private static final long serialVersionUID = 1L;
public Internal(String title) {
super(title);
setBounds(10, 10, 300, 100);
}
}
public static void main(String[] a) {
new Main();
}
}