Java Can';不要让JLabel从头开始在GUI上切换

Java Can';不要让JLabel从头开始在GUI上切换,java,swing,user-interface,awt,layout-manager,Java,Swing,User Interface,Awt,Layout Manager,我正在为一个小爱好项目学习GUI的基础知识,并一直在学习从头开始编写GUI。我有初始设置和变量等,但我有一个问题。我似乎无法让我的JLabel clas移动到面板的左侧。我知道有更简单的方法来编写GUI。我只是简单介绍GUI最基本的声明。这是我的密码: public class GUIGameFromScratch { static String[] Classes = { "Barbarian", "Fighter", "

我正在为一个小爱好项目学习GUI的基础知识,并一直在学习从头开始编写GUI。我有初始设置和变量等,但我有一个问题。我似乎无法让我的JLabel clas移动到面板的左侧。我知道有更简单的方法来编写GUI。我只是简单介绍GUI最基本的声明。这是我的密码:

public class GUIGameFromScratch {
static String[] Classes = {
            "Barbarian",
            "Fighter",
            "Rogue",
            "Wizard"
        };
static String[] Races = {
            "Dwarf",
            "Gnome",
            "Half-Orc",
            "Human"
        };
static String[] Gender = {
            "Male",
            "Female"
        };
static String cls;
static String rcs;
static String gen;
static String gameName = "RPG Text";
static Component frame = null;
static Component icon = null;

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    Classes(Classes);
    Races(Races);
    Gender(Gender);
    JFrame display = new JFrame();
    display.setSize(300,250);
    display.setVisible(true);
    display.setTitle(gameName);
    display.setResizable(false);
    JPanel disPane = new JPanel();
    display.add(disPane);
    disPane.setVisible(true);
    disPane.setSize(295,245);
    JLabel clas = new JLabel();
    disPane.add(clas);
    clas.setVisible(true);
    clas.setLocation(5,5);
    clas.setSize(100,50);
    clas.setText("Class: " + cls);
}

public static void Classes(String[] Classes){
    cls = (String)JOptionPane.showInputDialog(frame,
            "Choose a Class:",
            gameName,
            JOptionPane.PLAIN_MESSAGE, (Icon) icon,
            Classes,
            Classes[0]
    );
}

public static void Races(String[] Races){
    rcs = (String)JOptionPane.showInputDialog(frame,
            "Choose a Race:",
            gameName,
            JOptionPane.PLAIN_MESSAGE, (Icon) icon,
            Races,
            Races[0]
    );
}

public static void Gender(String[] Gender){
    gen = (String)JOptionPane.showInputDialog(frame,
            "Choose a Gender:",
            gameName,
            JOptionPane.PLAIN_MESSAGE, (Icon) icon,
            Gender,
            Gender[0]
    );
}
}

我不完全确定如何回避这个问题。我需要能够移动标签以刷新我的GUI,但似乎什么都不起作用。我试过定位、区域设置、水平对齐等。肯定有一些功能我没有找到。再一次,我明白我在这方面采取了非常严格的方法。任何帮助都将不胜感激。

我建议开始研究Swing中可用的一些基本布局系统。通常,您希望将布局管理器指定给JFrame,然后使用布局管理器在窗口中定位组件。我要做的另一个注意事项是,在设置完所有参数(如大小或标题)之前,避免将组件或JFrame设置为可见,因为从理论上讲,它可以向用户实时显示更改。

我建议开始查看Swing中可用的一些基本布局系统。通常,您希望将布局管理器指定给JFrame,然后使用布局管理器在窗口中定位组件。我要做的另一个注意事项是,避免在设置完所有参数(如大小或标题)之前设置组件或JFrame可见,因为理论上它可以向用户实时显示更改。

Swing/AWT使用布局管理器显示子组件。每个容器(如JPanel)都有一个布局管理器

布局管理器的任务是设置每个子组件的位置和大小。调用
setLocation
时传递的任何值都将在父级布局管理器布局其子级并确定其位置和大小时被丢弃

最简单的解决方案是指定一个布局管理器,将其子组件放置在左侧:

JPanel disPane = new JPanel(new FlowLayout(FlowLayout.LEFT));
我相信您计划在窗口中添加更多组件。如果希望以更复杂的方式进行布局,则可能需要更复杂的布局管理器,或多个布局管理器的组合。在彼此内部使用许多JPanel是非常常见的,每个JPanel都有自己的布局管理器。例如,如果您需要一行大小相同的按钮,您可以使用一个单独的JPanel,其中只包含这些按钮

浏览文档以查看可用的布局管理器非常有用:

  • 在页面顶部附近有一个“所有已知的实现类”部分
  • 和包括一些标准布局管理器,所有这些管理器的名称都以
    layout
    结尾
在我看来,最有用的布局管理器是(不要与GridLayout混淆)。这很难学习,主要是因为布局组件可能是一个复杂的问题,但一旦您完全理解了它,它就会变得非常有用,并且非常容易使用

其他一些常用布局包括:

但是没有一个布局管理器可以解决所有的问题,这就是为什么程序员需要将它们结合起来并嵌套

尺寸 正如布局管理器控制子零部件的位置一样,它也可以控制其尺寸

您当前正在将JLabel的大小设置为100×50像素。我确信它在你的电脑上看起来很好

但是Java被设计用于在许多计算机和操作系统上运行。如果您的JLabel字体为12点Lucida,那么JLabel需要多少像素高?“12点”字体不是12像素高;12点实际上是12⁄72英寸。准确地说,需要多少像素来对应该测量值取决于用户的显示器和当前的图形分辨率

理论上,您可以自己做所有的数学运算来确定JLabel需要有多大,但您不需要,因为Swing已经做到了。JLabel已经说明了这一点


根本不设置JLabel的大小,父布局管理器将遵守其默认的首选大小,无论在运行程序的计算机上什么大小可能合适。

Swing/AWT使用布局管理器显示子组件。每个容器(如JPanel)都有一个布局管理器

布局管理器的任务是设置每个子组件的位置和大小。调用
setLocation
时传递的任何值都将在父级布局管理器布局其子级并确定其位置和大小时被丢弃

最简单的解决方案是指定一个布局管理器,将其子组件放置在左侧:

JPanel disPane = new JPanel(new FlowLayout(FlowLayout.LEFT));
我相信您计划在窗口中添加更多组件。如果希望以更复杂的方式进行布局,则可能需要更复杂的布局管理器,或多个布局管理器的组合。在彼此内部使用许多JPanel是非常常见的,每个JPanel都有自己的布局管理器。例如,如果您需要一行大小相同的按钮,您可以使用一个单独的JPanel,其中只包含这些按钮

浏览文档以查看可用的布局管理器非常有用:

  • 在页面顶部附近有一个“所有已知的实现类”部分
  • 和包括一些标准布局管理器,所有这些管理器的名称都以
    layout
    结尾
在我看来,最有用的布局管理器是(不要与GridLayout混淆)。这很难学习,主要是因为布局组件可能是一个复杂的问题,但一旦您完全理解了它,