将JButton放在特定的坐标上[需要帮助]

时间:2013-10-08 17:24:23

标签: java swing jbutton

我想在JFrame中的特定坐标上放置一个Jbutton。我尝试过使用setLocation和setBounds,但它们都不起作用。我想我肯定做错了。我是Java的新手,并试图将其搞砸

我的输出:

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

public class BingoHelper extends JFrame implements WindowListener, ActionListener{
    JTextField text = new JTextField(10);

    private JButton b; {
            b = new JButton("Click to enter name");
            }

    public void actionPerformed (ActionEvent e) {
        String fn = JOptionPane.showInputDialog("Username:");
        String sn = JOptionPane.showInputDialog("Password:");
        JOptionPane.showMessageDialog(null, "Welcome " + fn + " " + sn + ".", "", JOptionPane.INFORMATION_MESSAGE);
        text.setText(fn + " " + sn);
        b.setVisible(false);
        text.setVisible(true);
        text.setBounds(100,20,49,90);
        b.setBounds(100,90,22,30);
    } 

    public BingoHelper(){
        super("BINGO");
        setLayout(new FlowLayout());
        add(b);
        add(text);
        text.setVisible(false);
        b.setVisible(true);
        b.setBounds(0,0,220,30);
        b.addActionListener(this);
    }

    public void windowClosing(WindowEvent e) {
        dispose();
        System.exit(0);

    }
    public void windowOpened(WindowEvent e) {}
    public void windowActivated(WindowEvent e) {}
    public void windowIconified(WindowEvent e) {}
    public void windowDeiconified(WindowEvent e) {}
    public void windowDeactivated(WindowEvent e) {}
    public void windowClosed(WindowEvent e) {}
}

2 个答案:

答案 0 :(得分:2)

大多数情况下,没有理由通过坐标定位UI元素。你应该看看布局管理员。你正在打开一堆我认为你不想处理的蠕虫。例如,当用户尝试重新调整屏幕大小时,您可能会遇到并发症。

请改为查看此文档:http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

GridBagLayout 非常笨拙而且使用起来很痛苦,但它应该足够灵活,以适应您想要完成的任何事情。但是,您也应该查看其他布局管理器。您可以结合使用其中一个或多个来完成您想要的外观和感觉。

话虽如此,我讨厌Java的内置布局管理器。一旦你了解它们的工作方式,你就应该转向第三方布局系统。 MIGLayout非常老板。

答案 1 :(得分:1)

负责组件位置的对象是Layout Manager。但是,如果您想自己指定坐标,则必须在放置组件的Container中指定null layout

在您的代码中,您将框架内容窗格(Container)的布局设置为FlowLayout,但您需要将其设置为null:setLayout(null);。然后你可以在JButton上使用setBounds来指定它的位置。

然而强烈建议使用布局管理器(可能有几个使用JPanel)。

修改:为了让您了解为什么有这么多不同的布局,请查看the visual guide to layout managers