我正在努力学习java,但我遇到了一些问题,找到答案对我来说并不简单。我想做的任务似乎很简单。
我想给Frame添加一个标签。MyFrame是一个JFrame类,具有一些基本的修改,如大小、颜色等。
主代码如下:
public class Main {
public static void main(String[] args)
{
// a GUI window to add components
MyFrame myFrame = new MyFrame();
ImageIcon image = new ImageIcon("Images/background.png");
//a GUI display area for a string of text,image or both
JLabel label = new JLabel("Why it is happening?",image,JLabel.CENTER);
myFrame.add(label);
//label.setText("Why it is happening?");// set text of label
//label.setIcon(image);
label.setHorizontalTextPosition(JLabel.CENTER);
}
}
我得到的结果是我想要的:正确结果
当我评论关于标签的最后一行时,它正在改变我的UI外观。它只显示JFrame,根本没有我的标签。
不工作代码:
public class Main {
public static void main(String[] args)
{
// a GUI window to add components
MyFrame myFrame = new MyFrame();
ImageIcon image = new ImageIcon("Images/background.png");
//a GUI display area for a string of text,image or both
JLabel label = new JLabel("Why it is happening?",image,JLabel.CENTER);
myFrame.add(label);
//label.setText("Why it is happening?");// set text of label
//label.setIcon(image);
//Commented
//label.setHorizontalTextPosition(JLabel.CENTER);
}
}
以下是图形结果:不工作标签
我错过了一些基本信息吗?我认为两者应该一样工作。
这是一个有趣的例子。乍一看,我同意@VGR的观点。但是,如果这一切都取决于绘画等的顺序,那么我会期望调用"repaint(("甚至"invalidate(("来解决问题。看起来不像…所以也许这是一个正在运行的bug。
import javax.swing.*;
public class Main
{
public static void main(String[] args)
{
// a GUI window to add components
JFrame myFrame = new JFrame();
ImageIcon image = new ImageIcon("Images/background.png");
myFrame.setSize(500,250);
myFrame.setVisible(true);
JLabel label = new JLabel("Why it is happening?", image, JLabel.CENTER);
myFrame.add(label);
//label.setHorizontalTextPosition(JLabel.CENTER);
label.repaint(); //Should have the same effect as the line above, but doesn't!
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}