Java 如何将按钮放在屏幕上我想要的位置。

Java 如何将按钮放在屏幕上我想要的位置。,java,swing,layout,location,jbutton,Java,Swing,Layout,Location,Jbutton,好的,我想把我的按钮放在屏幕上的某个地方。有没有办法把它放在一个精确的像素位置?现在它把它放在我屏幕的最右边。我有一个形象,我希望它去了太多 import java.awt.AWTException; import java.awt.FlowLayout; import java.awt.Rectangle; import java.awt.Robot; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java

好的,我想把我的按钮放在屏幕上的某个地方。有没有办法把它放在一个精确的像素位置?现在它把它放在我屏幕的最右边。我有一个形象,我希望它去了太多

import java.awt.AWTException;
import java.awt.FlowLayout;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.image.BufferedImage;
import java.awt.image.DataBuffer;
import java.awt.image.DataBufferInt;
import java.awt.image.WritableRaster;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class UnfollowGUI extends JFrame{

private JLabel label;
private JButton button;

private ImageIcon bgi;
private JLabel bgl;

public static Rectangle gameSquare;

public static boolean rock = true;
public static boolean runningMine = true;
public static int stray = 0;
public static int strayCount = 0;


public static void main(String[] args) {
    UnfollowGUI gui = new UnfollowGUI ();
    gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // when click x close program
    //gui.setSize(886, 266);
    gui.pack();
    gui.setVisible(true);
    gui.setTitle("Solid Cloud Inc - Twitter Unfolower");
}

public UnfollowGUI(){

    setLayout(new FlowLayout());

    bgi = new ImageIcon(getClass().getResource("tu.png"));
    bgl = new JLabel (bgi);
    add(bgl);

    ImageIcon start = new ImageIcon(getClass().getResource("start.png"));
    button = new JButton (start);
    button.setBorder(BorderFactory.createEmptyBorder());
    button.setContentAreaFilled(false);

    add(button);

    label = new JLabel ("");
    add(label);

    Events e = new Events();
    button.addActionListener(e);
}

public class Events implements ActionListener {


    public void actionPerformed(ActionEvent e) {

        if (e.getSource() == button) {
           label.setText("Searching");
           try {
            Unfollow();
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        }
}

}

通过不使用布局管理器,您可以将东西精确放置在所需的位置。这称为绝对定位,您可以在此处阅读有关它的教程:

以下是该教程中的一段代码:

pane.setLayout(null);

JButton b1 = new JButton("one");
JButton b2 = new JButton("two");
JButton b3 = new JButton("three");

pane.add(b1);
pane.add(b2);
pane.add(b3);

Insets insets = pane.getInsets();
Dimension size = b1.getPreferredSize();
b1.setBounds(25 + insets.left, 5 + insets.top,
             size.width, size.height);
size = b2.getPreferredSize();
b2.setBounds(55 + insets.left, 40 + insets.top,
             size.width, size.height);
size = b3.getPreferredSize();
b3.setBounds(150 + insets.left, 15 + insets.top,
             size.width + 50, size.height + 20);

...//In the main method:
Insets insets = frame.getInsets();
frame.setSize(300 + insets.left + insets.right,
              125 + insets.top + insets.bottom);
结果是这样的:


不使用布局管理器,您可以将东西精确放置在所需的位置。这称为绝对定位,您可以在此处阅读有关它的教程:

以下是该教程中的一段代码:

pane.setLayout(null);

JButton b1 = new JButton("one");
JButton b2 = new JButton("two");
JButton b3 = new JButton("three");

pane.add(b1);
pane.add(b2);
pane.add(b3);

Insets insets = pane.getInsets();
Dimension size = b1.getPreferredSize();
b1.setBounds(25 + insets.left, 5 + insets.top,
             size.width, size.height);
size = b2.getPreferredSize();
b2.setBounds(55 + insets.left, 40 + insets.top,
             size.width, size.height);
size = b3.getPreferredSize();
b3.setBounds(150 + insets.left, 15 + insets.top,
             size.width + 50, size.height + 20);

...//In the main method:
Insets insets = frame.getInsets();
frame.setSize(300 + insets.left + insets.right,
              125 + insets.top + insets.bottom);
结果是这样的:


Java GUI可能必须在多种平台上工作,使用不同的屏幕分辨率&使用不同的PLAF。因此,它们不利于部件的精确放置


要组织一个健壮的GUI组件,请使用布局管理器(或它们的组合),以及空白区域的布局填充和边框。

Java GUI可能必须在多个平台、不同的屏幕分辨率和使用不同的PLAF上工作。因此,它们不利于部件的精确放置


为了组织一个健壮的GUI组件,可以使用布局管理器(或它们的组合)以及空白区域的布局填充和边框。

另一种实现您所描述内容的方法可以通过这种方式实现(有许多备选方案,但最终,这完全取决于您希望组件如何相互相对定位,以及父容器的大小发生变化时会发生什么情况):


实现您描述的另一种方法可以通过这种方式实现(有许多备选方案,但最终,这完全取决于您希望组件如何相互相对定位,以及父容器的大小发生变化时会发生什么):


但是如果你不使用像mattise这样的gui编辑器,你会非常不鼓励不要使用布局管理器:)@nachokk我不知道还有什么其他方法可以将按钮放置在你想要的精确像素上。我也不知道,但是要小心很多神奇的数字,如果你没有gui编辑器是没有用的-1:建议使用空布局总是一个不好的建议(无论是否使用GUI编辑器)。有许多技术可以将组件放置在精确的位置(尽管这一要求非常罕见)。大多数情况下,要求是“我希望这个组件紧挨着这个组件”,“我希望一个组件延伸到这个组件下面”,等等。。。您有相对约束,而不是绝对约束。其中一个主要原因是您事先不知道每个组件的大小(不同的L&F、不同的屏幕分辨率、不同的DPI等)。所有这些都由LayoutManager’s.IMOHO妥善处理。如果答案满足用户需求,并且是一种良好的实践/方法,那么答案是有效的。在这种情况下,使用LayoutManager很容易实现(您可以使用空边框实现,您可以实现执行绝对定位的自定义LayoutManager,
MigLayout
也支持此功能,…)但是如果你不使用像mattise这样的gui编辑器,就不鼓励你不使用布局管理器:)@nachokk我不知道还有什么其他方法可以按你想要的像素来设置按钮。我也不知道,但是如果你没有gui编辑器,就要小心很多神奇的数字-1:建议使用空布局总是一个不好的建议(无论是否使用GUI编辑器)。有许多技术可以将组件放置在精确的位置(尽管这一要求非常罕见)。大多数情况下,要求是“我希望这个组件紧挨着这个组件”,“我希望一个组件延伸到这个组件下面”,等等。。。您有相对约束,而不是绝对约束。其中一个主要原因是您事先不知道每个组件的大小(不同的L&F、不同的屏幕分辨率、不同的DPI等)。所有这些都由LayoutManager’s.IMOHO妥善处理。如果答案满足用户需求,并且是一种良好的实践/方法,那么答案是有效的。在这种情况下,使用LayoutManager是很容易做到的(你可以使用空边框,你可以实现一个自定义的LayoutManager,它可以执行绝对定位,
MigLayout
也支持这一点,…),建议不要使用LayoutManager会让OP走上一条非常糟糕的道路。