这是我的JLabel
。它从另一个函数获取值,我可以在status
中显示JFrame
的值。但是我无法在控制台中打印它。
JFrame frame=new JFrame("Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setSize(300,150);
status = new JLabel("Status");
frame.add(status,BorderLayout.CENTER);
System.out.println(status);
为什么会这样?
答案 0 :(得分:3)
看到你的进一步评论后,我想我理解你的困惑。您对图像和JLabel如何相互协作有一点误解。
您一直在尝试将图像路径作为String参数传递给JLabel。但是,JVM将从字面上理解,实际上只会以文本形式在生成的JLabel中显示图像路径。
您需要做的是将ImageIcon作为参数传递给JLabel,并且通过文件路径传递给ImageIcon。
例如:
ImageIcon myImage = new ImageIcon("C:\\Folder\\File.png"); // Your image
JLabel imageJLabel = new JLabel(myImage); // Your JLabel containing said image
不要忘记导入ImageIcon库,以便使用import语句正确地工作:
import javax.swing.ImageIcon;
我确实想确保您了解这些路径String。当然,您可以将String存储在变量中,然后根据需要将此变量传递给ImageIcon。
例如:
String pathString = "C:\\Folder\\File.png";
ImageIcon myImage = new ImageIcon(pathString);
但请注意,Strings的路径看起来与您在操作系统中处理它们时常常看到的路径略有不同。对于指示您正在通过目录移动的每个反斜杠(\),您将需要替换为双反斜杠(\\)。这是因为,在Java中,反斜杠称为转义字符,并指示其后面的字符是文字(即它没有任何特殊功能)。因此,您需要一个反斜杠来告诉编译器它后面的反斜杠是文字的,而不是用作转义字符。
路径字符串可以像任何其他字符串一样进行操作,这使得在需要时可以非常方便地添加或删除文件扩展名(例如.png)。
您提到了如何使用
将JLabel打印到控制台status = new JLabel("Status");
System.out.println(status);
你不明白的是JLabel是一个严格的图形对象,在一个仅处理文本的控制台环境中毫无意义。因此,尝试将实际的JLabel打印到控制台是没有意义的。
我怀疑你要做的是将JLabel的内容打印到控制台。为此,您需要确保传递给
的内容System.out.println();
是一个字符串,因为这是他们所理解的[简化]。如果JLabel的内容是基于文本的,那么JLabel有一个内置的方法来返回这些内容的String值。
status = new JLabel("Status");
String textFromJLabel = status.getText(); // Get the text from the JLabel
System.out.println(textFromJLabel); // Print it to console
答案 1 :(得分:1)
使用另一个变量作为状态。不要使用JLabel文本。还要确保Status.png的目录正确无误。尝试
ImageIcon image = new ImageIcon("E:\\Status.png");
答案 2 :(得分:1)
你应该使用
ImageIcon image = new ImageIcon("E:\\"+status.getText()+".png");
通常文件网址看起来像 C:\ Users \用户Madhawa.se \桌面\ BAC \ GUI \ transparentglass.jpg
所以它应该是E:\ America.png而不是E:/America.png .isn' t
答案 3 :(得分:1)
您只能打印字符串,而您正在尝试打印JLabel。 status是JLabel对象(Type JLabel)。你需要一个字符串来打印。 JLabel中的文本与JLabel分开,就像汽车与其车牌号码分开一样。
status = new JLabel("Status");
String jlabelText = status.getText(); // Returns a String object
System.Out.println(jlabelText); // prints out the string variable
System.Out.println(status.getText()); // Or do it in one line
答案 4 :(得分:0)
System.out.println()
有多次重载。
当您传递JLabel
类型的参数时,请调用System.out.println(Object)
。
您可以使用JLabel.getText()
重新获取其文字。
然后,您可以拨打System.out.println(String)
。