0

好的,我想将我的按钮放在屏幕上的某个位置。有没有办法把它放在一个精确的像素位置?现在它把它放在我屏幕的最右边。我有一个图像,我希望它也可以覆盖。

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();
        }
        }
}

}
4

3 回答 3

3

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

要为强大的 GUI 组织组件,请改用布局管理器(或它们的组合),以及用于空白空间的布局填充和边框。

于 2013-06-10T23:59:17.927 回答
3

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

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TestLoginGridBagLayout {

    protected void initUI() throws MalformedURLException {
        JFrame frame = new JFrame("Background image");
        frame.getContentPane().setBackground(Color.BLACK);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JLabel background = new JLabel(new ImageIcon(new URL("http://images2.layoutsparks.com/1/161318/city-lights-bridge-decoration.jpg")));
        background.setVerticalAlignment(JLabel.BOTTOM);
        background.setHorizontalAlignment(JLabel.LEFT);
        background.setLayout(new BorderLayout());
        frame.add(background);
        JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
        buttonPanel.setOpaque(false);
        buttonPanel.add(new JButton("Some button in the bottom left"));
        background.add(buttonPanel, BorderLayout.SOUTH);
        frame.pack();
        frame.setVisible(true);
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    new TestLoginGridBagLayout().initUI();
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }
            }
        });
    }

}
于 2013-06-11T08:00:03.393 回答
0

您可以通过不使用布局管理器将东西放置在您想要的确切位置。这称为绝对定位,您可以在此处阅读有关它的教程:http: //docs.oracle.com/javase/tutorial/uiswing/layout/none.html

这是该教程中的一段代码:

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);

最终看起来像这样:

在此处输入图像描述

于 2013-06-10T17:00:38.397 回答