gpt4 book ai didi

java - JFrame 添加文本不起作用。出现两个GUI

转载 作者:行者123 更新时间:2023-12-01 12:48:17 33 4
gpt4 key购买 nike

我正在尝试创建一个简单的 JFrame 菜单,其中有一个漂亮的背景,可以使用,还有一些文本。文字有点错误。这是它的样子 ( /image/yZHUe.jpg )

如您所见,仅出现一行文本,而不是第二行。

同时。当我运行该程序时,会出现两个 GUI。一张是空的,一张看起来像上图。

最后我不能使用方法 logo.setHorizo​​ntalAlignment(JLabel.NORTH);没有出现错误,与其他一些错误相同。我测试和工作的两个只有.CENTER和.LEFT。

任何帮助都会很棒!

哦,差点忘了,这是我的代码:)

    package character;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.IOException;

/**
* Created by Niknea on 6/28/14.
*/
public class characterSelector extends JFrame{


JPanel cselectorText;

JFrame cselectorButtons;

JLabel logo, characterName, label;

JButton previous, next;


public characterSelector(String title){
super(title);

this.createCharacterSelector();

this.setSize(1920, 1033);
this.setResizable(true);
this.setVisible(true);
}


public void createCharacterSelector(){

try {
label = new JLabel(new ImageIcon(ImageIO.read(getClass().getResource("/resources/Grass_Background.jpg"))));


cselectorButtons = new JFrame();

logo = new JLabel("SoccerKidz [REPLACE W/ COOL LOGO]");

characterName = new JLabel("<Character Name>");

logo.setPreferredSize(new Dimension(50, 50));



logo.setFont(new Font(logo.getFont().getName(), Font.HANGING_BASELINE, 50));

characterName.setFont(new Font(characterName.getFont().getName(), Font.HANGING_BASELINE, 50));

cselectorButtons.add(logo);

cselectorButtons.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cselectorButtons.setContentPane(label);
cselectorButtons.setLayout(new BorderLayout());
characterName.setForeground(Color.CYAN);
characterName.setHorizontalAlignment(JLabel.CENTER);
cselectorButtons.add(characterName);
logo.setForeground(Color.CYAN);
logo.setHorizontalAlignment(JLabel.LEFT);
cselectorButtons.add(logo);
cselectorButtons.pack();
cselectorButtons.setLocationRelativeTo(null);
cselectorButtons.setVisible(true);
} catch (IOException exp) {
exp.printStackTrace();
}
}
}

再次感谢! :)

最佳答案

As you can see, only one line of the text appears not the second line.

您设置cselectorButtons的布局至BorderLayout 。然后添加 JLabel("<Character Name>"); ,这很好。但然后你添加 JLabel("SoccerKidz [REPLACE W/ COOL LOGO]"); 。这就是发生的事情。与BorderLayout ,当你只是 add(component) ,通常您要指定 BorderLayout.[POSITION]作为 add 的第二个参数。如果不这样做,您添加的每个组件(未指定位置)都将添加到 BorderLayout.CENTER默认情况下隐式。问题是每个位置只能有一个组件。因此,在您的情况下,第一个标签被踢出中心,仅显示您添加的第二个标签。

Two GUI's appear when I run the program. One is completley empty, and one looks like the picture above.

当查看你的代码时。你的类(class)是 JFrame其中您不添加任何内容,并且 this.setVisible(true) 。还有你JFrame cselectorButtons;确实在其中添加组件,并且还cselectorButtons.setVisible(true); 。你能猜出你看到的哪一个不是空的吗?不要扩展JFrame 。只需使用您当前正在使用的实例即可。

Finally I can't use the method logo.setHorizontalAlignment(JLabel.NORTH); without getting an error.

不用多看 the API for JLabel 。话虽这么说,让您认为水平对齐某物的原因应该包括向北定位的选项。没有意义

  • public void setHorizontalAlignment(int alignment)

    Sets the alignment of the label's contents along the X axis.

    Parameters: alignment - One of the following constants defined in SwingConstants: LEFT, CENTER (the default for image-only labels), RIGHT, LEADING (the default for text-only labels) or TRAILING.

<小时/>

我建议你看看Layout out Components Within a ContainerA Visual Guide to Layout Managers对于其他可能的布局管理器,您可以使用,if BorderLayout不适合你。另请记住,您可以使用不同的布局管理器嵌套不同的面板以获得所需的结果。但首先您需要了解它们是如何工作的。

<小时/>

更新

我做了一些更改,效果很好。我也在查看你的pastebin代码,并没有真正看到任何区别。您可能想研究我的代码以尝试寻找差异

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

/**
* Created by Niknea on 6/28/14.
*/
public class CharacterSelector {

JPanel cselectorText;
JFrame cselectorButtons;
JLabel logo, characterName, label;
JButton previous, next;

public CharacterSelector() {
createCharacterSelector();
}

public void createCharacterSelector() {

try {
label = new JLabel(new ImageIcon(ImageIO.read(getClass()
.getResource("/resources/Grass_Background.jpg"))));
cselectorButtons = new JFrame();
logo = new JLabel("SoccerKidz [REPLACE W/ COOL LOGO]");
characterName = new JLabel("<Character Name>");
logo.setPreferredSize(new Dimension(50, 50));
logo.setFont(new Font(logo.getFont().getName(),
Font.HANGING_BASELINE, 50));
characterName.setFont(new Font(characterName.getFont().getName(),
Font.HANGING_BASELINE, 50));
cselectorButtons.add(logo);
cselectorButtons.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cselectorButtons.setContentPane(label);
cselectorButtons.setLayout(new BorderLayout());
characterName.setForeground(Color.CYAN);
characterName.setHorizontalAlignment(JLabel.CENTER);
cselectorButtons.add(characterName);
logo.setForeground(Color.CYAN);
logo.setHorizontalAlignment(JLabel.LEFT);
cselectorButtons.add(logo, BorderLayout.NORTH);
cselectorButtons.pack();
cselectorButtons.setLocationRelativeTo(null);
cselectorButtons.setVisible(true);
} catch (IOException exp) {
exp.printStackTrace();
}
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
new CharacterSelector();
}
});
}
}

关于java - JFrame 添加文本不起作用。出现两个GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24471832/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com