- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个简单的 JFrame 菜单,其中有一个漂亮的背景,可以使用,还有一些文本。文字有点错误。这是它的样子 ( /image/yZHUe.jpg )
如您所见,仅出现一行文本,而不是第二行。
同时。当我运行该程序时,会出现两个 GUI。一张是空的,一张看起来像上图。
最后我不能使用方法 logo.setHorizontalAlignment(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) orTRAILING
.
我建议你看看Layout out Components Within a Container和 A 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/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!