Java Swing JFrame 大小不一致问题

3

这是我在Stackoverflow上的第一个问题。我从这里收集了很多页面,但没有解决我的问题。我的问题是有时候(不总是),我创建的JFrame在属性中设置的大小与实际显示的大小不同。我使用Netbeans 7.1.2,只进行GUI拖放制作,还不能进行GUI编码。以下是示例图片:

我的窗口组件看起来像是被裁剪了一样。运行时的大小和属性中的大小(最小大小和首选大小)不同。这种情况发生在Free Design或Absolute Design模式下都会出现。这个问题是什么?你知道通常会出现什么问题吗?我不知道发生了什么事。我该怎么解决?对于错误我深感抱歉。谢谢。

我不知道代码中的错误在哪里,但这是那个框架的代码:

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

    jButton4 = new javax.swing.JButton();
    jSeparator1 = new javax.swing.JSeparator();
    btBack = new javax.swing.JButton();
    jButton5 = new javax.swing.JButton();
    jLabel1 = new javax.swing.JLabel();
    btNext = new javax.swing.JButton();
    jLabel10 = new javax.swing.JLabel();
    jLabel2 = new javax.swing.JLabel();
    jSeparator2 = new javax.swing.JSeparator();
    jLabel3 = new javax.swing.JLabel();
    jLabel4 = new javax.swing.JLabel();
    jLabel5 = new javax.swing.JLabel();
    jLabel6 = new javax.swing.JLabel();
    jLabel7 = new javax.swing.JLabel();
    lbJudul = new javax.swing.JLabel();
    jPanel1 = new javax.swing.JPanel();

    jButton4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/otodidak/gambar/logomati.png"))); // NOI18N
    jButton4.setToolTipText("Tutup Otodidak");
    jButton4.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton4ActionPerformed(evt);
        }
    });

    setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
    setTitle("Otodidak");
    setAlwaysOnTop(true);
    setLocationByPlatform(true);
    setPreferredSize(new java.awt.Dimension(787, 410));
    setResizable(false);
    getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
    getContentPane().add(jSeparator1, new org.netbeans.lib.awtextra.AbsoluteConstraints(48, 53, 689, -1));

    btBack.setIcon(new javax.swing.ImageIcon(getClass().getResource("/otodidak/gambar/backlogo2.png"))); // NOI18N
    btBack.setToolTipText("Kembali");
    btBack.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            btBackMouseClicked(evt);
        }
    });
    btBack.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            btBackActionPerformed(evt);
        }
    });
    getContentPane().add(btBack, new org.netbeans.lib.awtextra.AbsoluteConstraints(224, 340, 130, -1));

    jButton5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/otodidak/gambar/logomati.png"))); // NOI18N
    jButton5.setToolTipText("Tutup Otodidak");
    jButton5.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton5ActionPerformed(evt);
        }
    });
    getContentPane().add(jButton5, new org.netbeans.lib.awtextra.AbsoluteConstraints(718, 358, 46, -1));

    jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/otodidak/gambar/synapticwvdial.png"))); // NOI18N
    getContentPane().add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(388, 65, 348, 264));

    btNext.setIcon(new javax.swing.ImageIcon(getClass().getResource("/otodidak/gambar/nextlogo2.png"))); // NOI18N
    btNext.setToolTipText("Lanjut");
    btNext.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            btNextMouseClicked(evt);
        }
    });
    getContentPane().add(btNext, new org.netbeans.lib.awtextra.AbsoluteConstraints(396, 340, 130, 48));

    jLabel10.setFont(new java.awt.Font("Ubuntu", 1, 48)); // NOI18N
    jLabel10.setText("1");
    getContentPane().add(jLabel10, new org.netbeans.lib.awtextra.AbsoluteConstraints(48, 68, 36, 40));

    jLabel2.setFont(new java.awt.Font("Ubuntu", 0, 24)); // NOI18N
    jLabel2.setText("Instal Aplikasi wvdial");
    getContentPane().add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(90, 80, -1, 24));
    getContentPane().add(jSeparator2, new org.netbeans.lib.awtextra.AbsoluteConstraints(50, 116, 216, 18));

    jLabel3.setFont(new java.awt.Font("Ubuntu", 0, 16)); // NOI18N
    jLabel3.setText("1) Buka Synaptic.");
    getContentPane().add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(56, 132, 368, 26));

    jLabel4.setFont(new java.awt.Font("Ubuntu", 0, 16)); // NOI18N
    jLabel4.setText("3) Klik kanan wvdial, pilih mark for Installation. ");
    getContentPane().add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(56, 207, 346, -1));

    jLabel5.setFont(new java.awt.Font("Ubuntu", 0, 16)); // NOI18N
    jLabel5.setText("2) Ketik wvdial. ");
    getContentPane().add(jLabel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(56, 170, 346, -1));

    jLabel6.setFont(new java.awt.Font("Ubuntu", 0, 16)); // NOI18N
    jLabel6.setText("4) Biarkan Synaptic menginstalkan wvdial. ");
    getContentPane().add(jLabel6, new org.netbeans.lib.awtextra.AbsoluteConstraints(56, 244, 346, -1));

    jLabel7.setFont(new java.awt.Font("Ubuntu", 0, 16)); // NOI18N
    jLabel7.setText("Catatan: internet harus menyala.");
    getContentPane().add(jLabel7, new org.netbeans.lib.awtextra.AbsoluteConstraints(58, 292, 298, 22));

    lbJudul.setFont(new java.awt.Font("Dialog", 1, 24)); // NOI18N
    lbJudul.setForeground(new java.awt.Color(254, 254, 254));
    lbJudul.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
    lbJudul.setText("Cara Menginstal Smartfren AC682");
    getContentPane().add(lbJudul, new org.netbeans.lib.awtextra.AbsoluteConstraints(117, 12, 578, -1));

    jPanel1.setBackground(new java.awt.Color(1, 1, 1));
    getContentPane().add(jPanel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, -2, 788, 50));

    pack();

不是整个代码,但可能有用。感谢您的关注...


发布展示问题的代码。 - Amarnath
1
为了更快地帮助您,提交一个 SSCCE,这是一个简短的、可运行的、可编译的示例。 - mKorbel
你正在使用NetBeans GUI构建器吗? - joey rohan
是的,Matisse。我之前已经提到过了。 - Ade Malsasa Akbar
2
请停止使用UI构建器。如果您继续使用它,您将学不到多少东西,并且您的设计会变得更加复杂。 - Amarnath
1个回答

5
...AbsoluteConstraints(117, 12, 578, -1)  

这是问题的基础。当使用pack()时,它与null布局一样无效。

解决方案很简单。使用尊重组件首选大小的布局管理器。


那么,我该怎么办?删除 AbsoluteConstraints 代码吗?在 Netbeans 中,我不能删除或更改 SuppressWarning 内部的任何内容。使用什么布局管理器?我只有两个布局管理器选项:Free Design 和 Absolute Design。我不知道哪一个适合我? - Ade Malsasa Akbar
3
不使用GUI构建器。手动编写GUI界面。根据您的图片,我看到一个主JPanel内有4个嵌套的JPanel。每个JPanel都会有自己的Swing布局管理器。 - Gilbert Le Blanc
2
在Netbeans中,使用哪种布局管理器?我只有两个布局管理器选项:自由设计和绝对设计。它们都会产生同样的问题。请注意,开发人员在理解Java布局如何工作之前,不能使用Netbeans或Eclipse(或其他任何IDE)的“GUI设计器”。关于“Netbeans不让我这样做”的问题,我建议“停止成为IDE的狗”。事实上,它已经抓住了你的短毛,并给了它们一个强硬的拉扯。 - Andrew Thompson
3
我建议你自己学习如何编写 GUI。这样做有许多好处:
  1. 你知道你在做什么,以及你的代码代表什么。(使用 GUI 构建器时,只需拖放,但如果出现意外情况,你每次都会感到惊讶。)
  2. 与使用 GUI 构建器相比,你也会更快。
  3. 你将获得更好的技能。
  4. 你将知道哪种布局最适合你的情况。
这需要一些努力,但是过一段时间后,你将获得它的好处。
- SomeJavaGuy
请确保添加@GilbertLeBlanc以通知他们有新的评论(例如4个面板)。这通常被称为“嵌套布局”。代码中显示了一个嵌套布局,详见此答案,以及其他3个嵌套布局的链接。 - Andrew Thompson
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接