简体   繁体   English

除非调整大小,否则JFrame窗口不会显示任何内容

[英]JFrame Window not showing any content unless resized

I have an Interface class that extends JFrame. 我有一个扩展JFrame的Interface类。 I am creating 3 JPanels and adding them to a Container (Border Layout) in different areas of the layout. 我正在创建3个JPanels,并将它们添加到布局的不同区域中的Container(边界布局)中。

When I run the application, nothing shows but a blank window and a title. 当我运行该应用程序时,仅显示空白窗口和标题。 If I resize the application it will then show all the content and work as intended. 如果我调整应用程序的大小,它将显示所有内容并按预期工作。

I'm not sure what I did differently this time, I've used this method before and it works in previous programs. 我不确定这次我做了什么改变,我以前使用过这种方法,并且在以前的程序中也可以使用。

Any help is appreciated. 任何帮助表示赞赏。

Here is my Interface Class Constructor code: http://pastebin.com/4UyEXsBr 这是我的接口类构造函数代码: http : //pastebin.com/4UyEXsBr

Code: 码:

public class Interface extends JFrame implements ActionListener {

private Container contentPane;

private JPanel buttonPanel, userPanel;

private JButton loginButton, createUserButton, logoutButton, withdrawButton, depositButton, switchToRegisterButton, switchToLoginButton;

private JLabel headerLabel, inputTopJTFLabel, inputPW1JPFLabel, toastLabel, inputPW2JPFLabel;

public JTextField inputTopJTF;
public JPasswordField inputPW1JPF, inputPW2JPF;

JRootPane rootPane;

public Interface(int width, int height, String title) {

    //Setting up Interface
    setTitle(title);
    setSize(width, height);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocation(100,100);
    setVisible(true);

    Font header = new Font("TimesRoman", Font.PLAIN, 50);

    ///////////////////////BUTTON PANEL///////////////////////

    //Button Panel
    buttonPanel = new JPanel();

    //Buttons
    //loginButton
    loginButton = new JButton("Login");
    loginButton.addActionListener(this);
    loginButton.setAlignmentX(Component.CENTER_ALIGNMENT);

    //switchToRegisterButton
    switchToRegisterButton = new JButton("New User?");
    switchToRegisterButton.addActionListener(this);
    switchToRegisterButton.setAlignmentX(Component.CENTER_ALIGNMENT);

    //switchToLoginButton
    switchToLoginButton = new JButton("Switch to Login");
    switchToLoginButton.addActionListener(this);
    switchToLoginButton.setAlignmentX(Component.CENTER_ALIGNMENT);
    switchToLoginButton.setVisible(false);

    //createUserButton
    createUserButton = new JButton("Register");
    createUserButton.addActionListener(this);
    createUserButton.setAlignmentX(Component.CENTER_ALIGNMENT);
    createUserButton.setVisible(false);

    //logoutButton
    logoutButton = new JButton("Logout");
    logoutButton.addActionListener(this);
    logoutButton.setAlignmentX(Component.CENTER_ALIGNMENT);
    logoutButton.setVisible(false);

    //withdrawButton
    withdrawButton = new JButton("Withdraw");
    withdrawButton.addActionListener(this);
    withdrawButton.setAlignmentX(Component.CENTER_ALIGNMENT);
    withdrawButton.setVisible(false);

    //depositButton
    depositButton = new JButton("Deposit");
    depositButton.addActionListener(this);
    depositButton.setAlignmentX(Component.CENTER_ALIGNMENT);
    depositButton.setVisible(false);

    //Adding items to buttonPanel
    buttonPanel.add(loginButton);
    buttonPanel.add(switchToRegisterButton);
    buttonPanel.add(switchToLoginButton);
    buttonPanel.add(createUserButton);
    buttonPanel.add(logoutButton);
    buttonPanel.add(withdrawButton);
    buttonPanel.add(depositButton);

    ///////////////BODY PANEL//////////////////////

    //Body Panel
    userPanel = new JPanel();
    userPanel.setLayout(new BoxLayout(userPanel, BoxLayout.PAGE_AXIS));

    //JTextFields
    //inputTopJTF
    Dimension inputTopJTFDimension = new Dimension(100, 20);
    inputTopJTF = new JTextField();
    inputTopJTF.setMaximumSize(inputTopJTFDimension);

    //inputPW1JPF
    Dimension inputPW1JPFDimension = new Dimension(100, 20);
    inputPW1JPF = new JPasswordField();
    inputPW1JPF.setMaximumSize(inputPW1JPFDimension);

    //inputPW2JPF
    Dimension inputPW2JPFDimension = new Dimension(100, 20);
    inputPW2JPF = new JPasswordField();
    inputPW2JPF.setMaximumSize(inputPW2JPFDimension);
    inputPW2JPF.setVisible(false);

    //JLabels
    //toastLabel
    toastLabel = new JLabel("Please sign in or create new account.");
    toastLabel.setAlignmentX(Component.CENTER_ALIGNMENT);

    //inputTopJTFLabel
    inputTopJTFLabel = new JLabel("Username:");
    inputTopJTFLabel.setAlignmentX(Component.CENTER_ALIGNMENT);

    //inputPW1JPFLabel
    inputPW1JPFLabel = new JLabel("Password:");
    inputPW1JPFLabel.setAlignmentX(Component.CENTER_ALIGNMENT);

    //inputPW2JPFLabel
    inputPW2JPFLabel = new JLabel("Confirm Password:");
    inputPW2JPFLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
    inputPW2JPFLabel.setVisible(false);

    //Adding items to userPanel
    userPanel.add(toastLabel);
    userPanel.add(inputTopJTFLabel);
    userPanel.add(inputTopJTF);
    userPanel.add(inputPW1JPFLabel);
    userPanel.add(inputPW1JPF);
    userPanel.add(inputPW2JPFLabel);
    userPanel.add(inputPW2JPF);

///////////////CONTENT PANE/////////////////////

//Content Pane
contentPane = getContentPane();

//JLabels
//headerLabel
headerLabel = new JLabel("Bank", SwingConstants.CENTER);
headerLabel.setFont(header);

//PAGE_START
contentPane.add(headerLabel, BorderLayout.PAGE_START);

//LINE_START

//CENTER
contentPane.add(userPanel, BorderLayout.CENTER);

//LINE_END

//PAGE_END
contentPane.add(buttonPanel, BorderLayout.PAGE_END);

userPanel.setFocusable(true);
userPanel.requestFocus();

//Default Button
rootPane = getRootPane();
rootPane.setDefaultButton(loginButton);

}

call 呼叫

setVisible(true);

in last line .because component added after line setvisible will not be shown until you call repaint(),revalidate() .when you resize ,repaint() method get called and frame will visible correctly .so call setvisible after add all component 在最后一行中,因为在setvisible行之后添加的组件直到调用repaint(),revalidate()才会显示。当您调整大小时,调用repaint()方法,并且帧将正确可见。 setvisible在添加所有组件后调用setvisible

after line rootPane.setDefaultButton(loginButton); rootPane.setDefaultButton(loginButton); call setvisible 呼叫设置setvisible

rootPane.setDefaultButton(loginButton);
setVisible(true);//after add all component to frame call setvisible method

this is full working code 这是完整的工作代码

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM