Java swing setSize

时间:2016-12-16 17:12:44

标签: java swing jframe

我遇到了问题,我设置了框架的大小,但不起作用。我找到了一个关于此的主题,但它对我没有帮助......

我尝试了getContentPane().getSize(500,500),但没有尝试。

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class Mere extends JFrame{
    private JPanel b;
    public Mere(String titlu){
        setSize(500,500);
        setLayout(null);
        this.getSmth();
        pack();
        show();
    }
    public void getSmth(){
        JLabel user=new JLabel("User");
        user.setBounds(10,10,80,25);
        getContentPane().add(user);

        JTextField userText=new JTextField(20);
        userText.setBounds(100,10,160,25);
        getContentPane().add(userText);

        JPasswordField pas=new JPasswordField(20);
        pas.setBounds(100,40,160,25);
        getContentPane().add(pas);

        JButton n=new JButton("Register");
        n.setBounds(180,80,100,30);
        getContentPane().add(n);

        JLabel pass=new JLabel("Pass");
        pass.setBounds(10,40,100,25);
        getContentPane().add(pass);
        getContentPane().setVisible(true);
    }
    public static void main(String[]args){
        new Mere("yas");
    }
}

1 个答案:

答案 0 :(得分:4)

  1. 您在致电pack();后致电setSize()

    来自Oracle docs

      

    使此窗口的大小适合其子组件的首选大小和布局。如果任一维度小于上一次调用setMinimumSize方法所指定的最小大小,则会自动放大窗口的最终宽度和高度。

    因此,您要覆盖getPreferredSize()方法或删除pack()来电。见Should I avoid the use of setPreferred/Maximum/MinimumSize?(是)

    然而,最好的做法是使用布局管理器(如下所述)然后调用pack()并让经理在为您计算preferredSize时完成工作

  2. 您还在使用null布局。 Swing设计用于不同的PLAF和屏幕尺寸和分辨率,而像素完美的GUI可能看起来是制作复杂GUI的最佳和更快的方法,你在这方面取得的进步越多,因此维护它的问题就越多,所以继续使用适当的Layout Manager或它们的组合。请参阅Null Layout is EvilWhy is it frowned upon to use a null layout in Java Swing?

  3. 另一件事是你没有将你的程序放在Event Dispatch Thread (EDT)上,请参阅SwingUtilities.invokeLater() why is it needed?this answer以获取有关如何使用它的示例

    < / LI>
  4. 我看到的另一件事是你展开JFrame翻译成英文,它说你的班级 JFrameJFrame当您需要将其添加到另一个Component时不灵活,而应创建JFrame实例,如果您确实需要扩展某些内容,请从JPanel扩展。