JLabel,网格布局 import java.awt.*; 导入java.awt.event.*; 导入javax.swing.*; 公共类Gui扩展JFrame { 私有JFrame窗口=新JFrame(); 私有JButton,但[]=新JButton[9]; 公共图形用户界面() { 设置窗口大小(300400); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(新的GridLayout(4,3)); JLabel txt=newjlabel(“你敢吗?”,JLabel.CENTER); setLayout(新的GridLayout(1,1)); txt.setHorizontalTextPosition(JLabel.CENTER); setFont(新字体(“Serif”,Font.PLAIN,21)); window.add(txt); 对于(int i=0;i

JLabel,网格布局 import java.awt.*; 导入java.awt.event.*; 导入javax.swing.*; 公共类Gui扩展JFrame { 私有JFrame窗口=新JFrame(); 私有JButton,但[]=新JButton[9]; 公共图形用户界面() { 设置窗口大小(300400); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(新的GridLayout(4,3)); JLabel txt=newjlabel(“你敢吗?”,JLabel.CENTER); setLayout(新的GridLayout(1,1)); txt.setHorizontalTextPosition(JLabel.CENTER); setFont(新字体(“Serif”,Font.PLAIN,21)); window.add(txt); 对于(int i=0;i,swing,grid-layout,java,Swing,Grid Layout,Java,我是JavaNoob,所以,你能告诉我,为什么“WillYouDare”文本不会出现在一行中?您能告诉我您是如何找到解决方案的吗,这样以后我也可以自己找到解决方案。您的代码中有两个注意事项: 使用以下表达式添加组件 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Gui extends JFrame { private JFrame window = new JFrame();

我是JavaNoob,所以,你能告诉我,为什么“WillYouDare”文本不会出现在一行中?您能告诉我您是如何找到解决方案的吗,这样以后我也可以自己找到解决方案。

您的代码中有两个注意事项:

使用以下表达式添加组件

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

    }

}
这两个调用都是指向的快捷方式

 window.add(txt);
 //....
 window.add(but[i]);
默认情况下,JFrame的内容窗格具有BorderLayout。默认情况下,如果添加时未指定其他区域/约束,则此布局将在中心区域添加零部件。所以你只要把一个组件放在另一个上面,就只剩下最后一个了

您应该“剪切”(翻译不好,切片?)更多的GUI,在中间添加JLabel,在南部添加另一个JPanel,在它内部,使用流布局并添加按钮

使用我提到的布局,非常标准

您还可以使用JLabel作为容器。几乎所有swing组件都继承自
java.awt.Container
,swing使用它来提供复合组件,但实际上,您不应该将它们用作容器,也就是说,不要将其他组件放在其中或给它们一个布局。你们这样做,在第二行给它一个布局

window.getContentPane().add
所以把这条线去掉。使用swing组件作为组件,使用JPanel(或JTabbedPane等)作为容器

问候,, 圣菲 顺便说一句,不要硬编码值,使用常量。没有9个,但按钮计数=9个静态成员。
你可以考虑买一本java书。我曾经向我的学生推荐Deitel和Deitel。

您的代码中有两个警告:

使用以下表达式添加组件

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

    }

}
这两个调用都是指向的快捷方式

 window.add(txt);
 //....
 window.add(but[i]);
默认情况下,JFrame的内容窗格具有BorderLayout。默认情况下,如果添加时未指定其他区域/约束,则此布局将在中心区域添加零部件。所以你只要把一个组件放在另一个上面,就只剩下最后一个了

您应该“剪切”(翻译不好,切片?)更多的GUI,在中间添加JLabel,在南部添加另一个JPanel,在它内部,使用流布局并添加按钮

使用我提到的布局,非常标准

您还可以使用JLabel作为容器。几乎所有swing组件都继承自
java.awt.Container
,swing使用它来提供复合组件,但实际上,您不应该将它们用作容器,也就是说,不要将其他组件放在其中或给它们一个布局。你们这样做,在第二行给它一个布局

window.getContentPane().add
所以把这条线去掉。使用swing组件作为组件,使用JPanel(或JTabbedPane等)作为容器

问候,, 圣菲 顺便说一句,不要硬编码值,使用常量。没有9个,但按钮计数=9个静态成员。
你可以考虑买一本java书。我曾经向我的学生推荐Deitel和Deitel。

这里是胡猜,但我想你想要的是:

txt.setLayout(new GridLayout(1, 1));
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
公共类Gui扩展JFrame
{
私有JFrame窗口=新JFrame();
私有JButton,但[]=新JButton[9];
公共图形用户界面()
{
设置窗口大小(300400);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//setLayout(新的GridLayout(4,3));
JPanel面板=新JPanel(新网格布局(3,3));
添加(面板、边框布局、中心);
JLabel txt=newjlabel(“你敢吗?”,JLabel.CENTER);
//setLayout(新的GridLayout(1,1));
txt.setHorizontalTextPosition(JLabel.CENTER);
setFont(新字体(“Serif”,Font.PLAIN,21));
//window.add(txt);
添加(txt,BorderLayout.NORTH);
对于(int i=0;i<9;i++)
{
但是[i]=newjbutton();
//窗口。添加(但[i]);
添加(但[i]);
}
window.setVisible(true);
}
公共静态void main(字符串args[])引发异常
{
新Gui();
}
}

这里是胡乱猜测,但我想你想要的是:

txt.setLayout(new GridLayout(1, 1));
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
公共类Gui扩展JFrame
{
私有JFrame窗口=新JFrame();
私有JButton,但[]=新JButton[9];
公共图形用户界面()
{
设置窗口大小(300400);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//setLayout(新的GridLayout(4,3));
JPanel面板=新JPanel(新网格布局(3,3));
添加(面板、边框布局、中心);
JLabel txt=newjlabel(“你敢吗?”,JLabel.CENTER);
//setLayout(新的GridLayout(1,1));
txt.setHorizontalTextPosition(JLabel.CENTER);
setFont(新字体(“Serif”,Font.PLAIN,21));
//window.add(txt);
添加(txt,BorderLayout.NORTH);
对于(int i=0;i<9;i++)
{
但是[i]=newjbutton();
//窗口。添加(但[i]);
添加(但[i]);
}
window.setVisible(true);
}
公共静态void main(字符串args[])引发异常
{
新Gui();
}
}