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

标签 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);  
    }
}

问题是什么。

最佳答案

What is the problem?

我很高兴你问这个问题。这不仅仅是让 Swing 应用程序工作的问题。您必须让 Swing 应用程序正确工作,以便您可以向 Swing 应用程序添加更多功能,而不会破坏 Swing 应用程序。

  1. 我在 main 方法中添加了对 SwingUtilities invokeLater 的调用。此调用可确保在 Event Dispatch thread 上定义和使用 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 扩展或收缩以适应组件,而不是固定大小。

这是修改后的代码。我将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());
    }
}

关于java - 无法在java中设置按钮的大小和位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22754720/

相关文章:

java - : "Publishing to WAS 8559 ..." 期间发生内部错误

java - 主应用程序线程会发生什么?

java - 在 Java 面板中包含命令提示符

java - 更新 JTable 日期

Java:多个 JScrollPanes 在 1 个公共(public)组件上显示 View

java - 转换值时重新格式化日期/时间

java - 如何在 Java 8 上使用 apple com.apple.eawt 功能?

java - 通过 IntelliJ 运行配置运行 Spring boot

java - 在通知中制作一首特定的歌曲

Java Swing - 使 JFrame 表现得像一个对话框