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