无法在java中设置按钮的大小和位置

时间:2014-03-31 06:16:45

标签: java swing

我刚刚编写了一个应用程序,但我无法将按钮的位置和大小设置为所需的值。每当我打开代码时,按钮就会出现在相同的位置并且大小相同 这是我的代码

public class main_class {
    public static void main(String args[]){
        Main_page mp = new Main_page();
        mp.start();
    }
}

第二个文件是:

import javax.swing.*;
import java.awt.*;

public class Main_page extends JPanel {
    private static final long serialVersionUID = 1L;
    public  void start(){
      JPanel panel1 = new JPanel();
      panel1.setBackground(Color.pink);

      JButton Button1 = new JButton("Programmer");
      Button1.setSize(10, 100);
      Button1.setLocation(200,500);
      panel1.add(Button1);

      JFrame  frame1 = new JFrame("Main Window");
      frame1.setSize(700,500);
      frame1.setContentPane(panel1);
      frame1.setResizable(false);
      frame1.setVisible(true);  
    }
}

问题是什么。

2 个答案:

答案 0 :(得分:1)

  

有什么问题?

我很高兴你问这个问题。这不仅仅是让Swing应用程序工作的问题。您必须让Swing应用程序正确才能正常工作,这样您就可以在不使用Swing应用程序的情况下为Swing应用程序添加更多功能。

  1. 我在main方法中添加了对SwingUtilities invokeLater的调用。此调用可确保在Event Dispatch thread(EDT)上定义和使用Swing组件。

  2. 我将您的类名改为MainPage,以符合命名类的Java标准。

  3. 我实现了Runnable,使invokeLater方法参数更容易定义。

  4. 我删除了JPanel的扩展。您使用Swing组件。扩展Swing组件的唯一原因是当您想要覆盖其中一个组件方法时。扩展任何Java类的唯一原因是当您想要覆盖其中一个类方法时。

  5. 我更改了要运行的MainPage方法的名称。

  6. 我为你的JPanel设置了一个布局(FlowLayout)。您必须始终使用layout manager作为Swing组件。

  7. 我将button1设为小写。 Java字段名称是小写的,因此您可以轻松地将它们与类名区分开来。

  8. 我在你的run方法中添加了对JFrame setDefaultCloseOperation的调用。如果没有此调用,关闭窗口时Swing应用程序将不会停止执行。过了一段时间,你将会运行几十个Swing应用程序的副本,没有简单的方法来阻止它们。

  9. 我添加了对JFrame包的调用,让JFrame扩展或收缩以适应组件,而不是固定大小。

  10. 这是修改后的代码。我将main方法放在MainPage类中,以便更容易粘贴代码。

    package com.ggl.testing;
    
    import java.awt.Color;
    import java.awt.FlowLayout;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    
    public class MainPage implements Runnable {
    
        @Override
        public void run() {
            JPanel panel1 = new JPanel();
            panel1.setBackground(Color.pink);
            panel1.setLayout(new FlowLayout());
    
            JButton button1 = new JButton("Programmer");
            panel1.add(button1);
    
            JFrame frame1 = new JFrame("Main Window");
            frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame1.add(panel1);
            frame1.pack();
    
            frame1.setVisible(true);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new MainPage());
        }
    }
    

答案 1 :(得分:0)

如果您想手动设置尺寸和位置,那么您可以使用panel1.setLayout(null);,因为人们在评论中已经说明了这一点。