【问题标题】:JFrame Resizing in Desktop Application - NetBeans桌面应用程序中的 JFrame 大小调整 - NetBeans
【发布时间】:2011-11-25 06:37:53
【问题描述】:

我正在 NetBeans IDE 中开发 Java 桌面应用程序。我想在JFrame 中显示小尺寸的登录屏幕。然后在登录后我想用其他面板将JFrame 扩展到全屏。问题是它显示一次正确,然后从下一次开始全屏显示登录屏幕。我怎样才能避免它?我将不同的面板放在同一个框架上。

登录时

this.getFrame().setExtendedState(Frame.NORMAL);
this.getFrame().setSize(360, 233);
this.getFrame().setResizable(false);

登录后

this.getFrame().setExtendedState(Frame.MAXIMIZED_BOTH);

【问题讨论】:

  • 在显示登录屏幕时调整它的大小?只是为了弄清楚这一点:您显示一个JFrame,其大小为200x200,然后您使用该JFrame 显示其他内容并将其调整为全屏。现在,当您在同一 JFrame 中显示登录信息时,您希望它重新调整为 200x200,对吗?如果resize() 不起作用,也许你应该在调整大小之前调用setExtendedState(Frame.NORMAL)
  • 我使用主 JFrame 显示登录详细信息,我放置了不同大小的新 jpanel。最初我设计了我的登录表单大小的 JFrame。

标签: java swing user-interface netbeans jframe


【解决方案1】:

我想在JFrame 中显示小尺寸的登录屏幕。然后在登录后我想将JFrame 扩展到其他面板的全屏。

以全尺寸显示框架,并使其成为显示登录详细信息的模态JDialogJOptionPane 的所有者。如果登录失败并且用户选择取消而不是重试,则退出应用。

如果我设计一个新的JDialog 用于登录,那么最初我该如何显示它?

JFrame f = this.getFrame();
JDialog loginDialog = new JDialog(f,"Login",true);
loginDialog.add(loginPanel);  
loginDialog.pack();
f.setExtendedState(Frame.MAXIMIZED_BOTH)
f.setVisible(true);
loginDialog.setLocationRelativeTo(f);
loginDialog.setVisible(true);

【讨论】:

  • 如我所说,Jdialog 对这种情况更有用。
  • 我正在 NetBeans Java 桌面应用程序中开发。如果我​​设计了一个新的 JDialog 用于登录,那么我如何才能在最初显示它。
  • 如果登录用户名和密码都可以。那么我怎样才能使主框架从该登录面板可见?
【解决方案2】:

聊天后编辑;

根据场景;外部桌面应用程序保持、记住和 将帧大小设置为上次设置。所以内板必须外接 来自桌面应用程序的主框架并设置大小和位置设置 应用程序运行后内部代码运行后。

如果没有整个项目,我无法对代码做更多的事情:)

以前的答案; 作为替代方案,您可以使用 JDialog 登录 否则下次显示登录屏幕时,请反转设置全屏时的操作。

一些代码示例可以帮助我们更好地回答您的问题。

编辑 2: 他下次登录屏幕前你用过吗?

this.getFrame().setExtendedState(Frame.NORMAL);

编辑 3:代码示例

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;


public class MyFrame extends JFrame implements MouseListener {

    /**
     * @param args
     */
    public static void main(String[] args) {

        MyFrame frame = new MyFrame();
        frame.setVisible(true);
        frame.setSize(200, 200);
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame.addMouseListener(frame);
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        if(this.getExtendedState() == JFrame.MAXIMIZED_BOTH){
            this.setExtendedState(JFrame.NORMAL);
        }
        else{
            this.setExtendedState(JFrame.MAXIMIZED_BOTH);
        }
    }

    @Override
    public void mousePressed(MouseEvent e) {

    }

    @Override
    public void mouseReleased(MouseEvent e) {

    }

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub

    }

}

【讨论】:

  • 我也试过了。但是登录后我不能让jframe全屏。
  • 我的回答中的上述示例代码没有问题。每次点击框架都会在框架的最大化和正常大小之间切换
  • 是的...但是我在登录后替换了 Jframes 面板。这会是问题吗?
【解决方案3】:

在你的构造函数中,在 initComponent() 函数之后加入一段简单的代码

initComponents();/*Function automated*/
setMinimumSize(new Dimension(700,400).getSize());
setExtendedState(MAXIMIZED_BOTH);/*To see your application starts maximized!*/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多