import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Gui extends JFrame
{
private JFrame window = new JFrame();
private JButton but[] = new JButton[9];
public Gui()
{
window.setSize(300,400);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setLayout(new GridLayout(4, 3));
JLabel txt = new JLabel("Will you dare?", JLabel.CENTER);
txt.setLayout(new GridLayout(1, 1));
txt.setHorizontalTextPosition(JLabel.CENTER);
txt.setFont(new Font("Serif", Font.PLAIN, 21));
window.add(txt);
for(int i = 0; i < 9; i++)
{
but[i] = new JButton();
window.add(but[i]);
}
window.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
}
}我是Java新手,所以,你能告诉我,为什么“你敢吗”的文本没有出现在一行中?你能告诉我你是如何找到解决方案的吗,所以其他时间我也可以自己去做。
发布于 2011-08-23 11:01:22
这是胡乱猜测,但我认为你想要这样的东西:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Gui extends JFrame
{
private JFrame window = new JFrame();
private JButton but[] = new JButton[9];
public Gui()
{
window.setSize(300,400);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// window.setLayout(new GridLayout(4, 3));
JPanel panel = new JPanel( new GridLayout(3, 3) );
window.add(panel, BorderLayout.CENTER);
JLabel txt = new JLabel("Will you dare?", JLabel.CENTER);
// txt.setLayout(new GridLayout(1, 1));
txt.setHorizontalTextPosition(JLabel.CENTER);
txt.setFont(new Font("Serif", Font.PLAIN, 21));
// window.add(txt);
window.add(txt, BorderLayout.NORTH);
for(int i = 0; i < 9; i++)
{
but[i] = new JButton();
// window.add(but[i]);
panel.add(but[i]);
}
window.setVisible(true);
}
public static void main(String args[]) throws Exception
{
new Gui();
}
}发布于 2011-08-23 11:00:11
在您的代码中有两个警告:
您可以使用以下表达式添加组件
window.add(txt);
//....
window.add(but[i]);这两个调用都是
window.getContentPane().add默认情况下,JFrame的内容窗格具有BorderLayout。默认情况下,如果在添加时未指定其他区域/约束,则此布局将在中心区域添加组件。因此,您只需将一个组件放在另一个组件之上,只剩下最后一个组件。
你应该“切”(翻译得不好,切片?)更多的图形用户界面,在中间添加你的JLabel,在南边添加另一个JPanel,在里面,使用流布局并添加你的按钮。
使用我提到的布局的Here is a good start,这是非常标准的。
也你使用一个JLabel作为一个容器。几乎所有的swing组件都继承自java.awt.Container,这是swing用来提供复合组件的,但实际上,你永远不应该将它们用作容器,也就是说,不要把其他组件放在里面或者给它们一个布局。您可以这样做,给它一个在line上的布局
txt.setLayout(new GridLayout(1, 1));所以删除这一行。使用swing组件作为组件和JPanel (或JTabbedPane等)作为容器。
顺便说一句,永远不要硬编码值,使用常量。不是9,而是BUTTON_COUNT =9静态成员。你可以考虑买一本java书。我过去常常向我的学生推荐Deitel和Deitel。
发布于 2011-08-23 13:56:56
这里的problem非常简单:你正在给你的标签“txt”添加一个布局。
您是说标签"txt“应该占据JFrame的第一行第一列。第一行,第一列将产生一个框。当你创建一个这样的方框时,你需要确保方框的宽度足以让你的文本完全适合一行。在这种情况下,您的文本只是跳到下一行,因为您创建的“框”中没有足够的空间来容纳整个标签。
解决问题的方法:
删除此行:txt.setLayout(new GridLayout(1, 1));:
或
将以下行更改为
txt.setLayout(new GridLayout(1, 1)); to txt.setLayout(new GridLayout(1, 1));你还有一个我注意到的问题:
private JButton but[] = new JButton[9]; JLabel txt = new JLabel("Will you dare?");//Removing the 'JLabel.CENTER'下面
这应该可以了。(我不认为我错过了任何东西)。:)
https://stackoverflow.com/questions/7155508
复制相似问题