0

我想在 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) {}
}
4

2 回答 2

2

大多数时候,没有理由通过坐标来定位 UI 元素。你真的应该看看布局管理器。你打开了一罐我认为你不想处理的蠕虫。例如,当用户尝试调整屏幕大小时,您可能会遇到麻烦。

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

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

话虽如此,我讨厌 Java 的内置布局管理器。一旦您了解了它们的工作原理,您绝对应该转向第三方布局系统。MIGLayout是个不错的老板。

于 2013-10-08T17:39:41.497 回答
1

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

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

但是强烈建议使用布局管理器(可能其中有几个使用JPanels)。

编辑:为了让您了解为什么有这么多不同的布局,请查看布局管理器的视觉指南

于 2013-10-08T17:42:21.033 回答