我刚刚编写了一个应用程序,但我无法将按钮的位置和大小设置为所需的值。每当我打开代码时,按钮就会出现在相同的位置并且大小相同 这是我的代码
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);
}
}
问题是什么。
答案 0 :(得分:1)
有什么问题?
我很高兴你问这个问题。这不仅仅是让Swing应用程序工作的问题。您必须让Swing应用程序正确才能正常工作,这样您就可以在不使用Swing应用程序的情况下为Swing应用程序添加更多功能。
我在main方法中添加了对SwingUtilities invokeLater的调用。此调用可确保在Event Dispatch thread(EDT)上定义和使用Swing组件。
我将您的类名改为MainPage,以符合命名类的Java标准。
我实现了Runnable,使invokeLater方法参数更容易定义。
我删除了JPanel的扩展。您使用Swing组件。扩展Swing组件的唯一原因是当您想要覆盖其中一个组件方法时。扩展任何Java类的唯一原因是当您想要覆盖其中一个类方法时。
我更改了要运行的MainPage方法的名称。
我为你的JPanel设置了一个布局(FlowLayout)。您必须始终使用layout manager作为Swing组件。
我将button1设为小写。 Java字段名称是小写的,因此您可以轻松地将它们与类名区分开来。
我在你的run方法中添加了对JFrame setDefaultCloseOperation的调用。如果没有此调用,关闭窗口时Swing应用程序将不会停止执行。过了一段时间,你将会运行几十个Swing应用程序的副本,没有简单的方法来阻止它们。
我添加了对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());
}
}
答案 1 :(得分:0)
如果您想手动设置尺寸和位置,那么您可以使用panel1.setLayout(null);
,因为人们在评论中已经说明了这一点。