我正在尝试更改一个JLabel的图标(背景),但我有一个问题,图标没有更新。每当我尝试lblstatusimg.seticon(新的ImageIcon(brix_updater_module.class.getResource(“/resources/fail.png”));
更改main方法中的JLabel时,编译器首先抱怨变量lblstatusimg
不存在,所以我将它从JFrame初始化方法移到了类级变量。在此之后,Eclipse抱怨我试图从静态上下文引用一个非静态方法,因此我将lblstatusimg
设置为静态的。这使得程序可以编译,但是图标并没有在任何时候改变。
由于很难理解我的问题,这里提供了一个Eclipse工作区的下载链接,演示了我的问题。当你第一次打开它的时候,你会注意到它有一些问题。他们是故意留在那里的,让你更容易看到我的困难所在。如果Eclipse要求您将所讨论的项设置为静态的,那么只需这样做,然后运行程序即可。您会注意到,它并没有像它应该做的那样更改标签图标。
由于不是所有人都有Eclipse,下面是工作区的全部代码。
import java.awt.Component;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.SwingConstants;
import java.awt.Window.Type;
import java.io.BufferedOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Timer;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class StackOverflow_Image_Resource_Demo {
private JFrame frmUpdate;
JLabel lblStatusImg = new JLabel("");
JButton btnUpdateComplete = new JButton("OK");
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
StackOverflow_Image_Resource_Demo window = new StackOverflow_Image_Resource_Demo();
window.frmUpdate.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
try {
lblStatusImg.setIcon(new ImageIcon(StackOverflow_Image_Resource_Demo.class.getResource("success.png")));
btnUpdateComplete.setVisible(true);
}
catch(Exception e)
{
Component frame = null;
lblStatusImg.setIcon(new ImageIcon(StackOverflow_Image_Resource_Demo.class.getResource("/resources/fail.png")));
JOptionPane.showMessageDialog(frame, "Update Failed", "Update Failed", JOptionPane.ERROR_MESSAGE);
System.exit(1);
}
}
/**
* Create the application.
*/
public StackOverflow_Image_Resource_Demo() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frmUpdate = new JFrame();
frmUpdate.setType(Type.UTILITY);
frmUpdate.setTitle("StackOverflow Image Resource Issue Demo");
frmUpdate.setBounds(100, 100, 450, 300);
frmUpdate.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmUpdate.getContentPane().setLayout(null);
//JLabel lblStatusImg = new JLabel(""); - Commented out when I made lblStatusImg class level.
lblStatusImg.setIcon(new ImageIcon(StackOverflow_Image_Resource_Demo.class.getResource("/resources/updating.gif")));
lblStatusImg.setBounds(10, 22, 414, 97);
frmUpdate.getContentPane().add(lblStatusImg);
//JButton btnUpdateComplete = new JButton("OK"); - Commented out when I made btnUpdateComplete class level.
btnUpdateComplete.setVisible(false);
btnUpdateComplete.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent arg0) {
System.exit(1);
}
});
btnUpdateComplete.setBounds(170, 179, 89, 23);
frmUpdate.getContentPane().add(btnUpdateComplete);
}
}
这是我的一个更新版本的代码,它更新了映像,但在完成其他所有操作之前不会完全加载UI。
import java.awt.Component;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.SwingConstants;
import java.awt.Window.Type;
import java.io.BufferedOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Timer;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class StackOverflow_Image_Resource_Demo {
private JFrame frmUpdate;
JLabel lblStatusImg = new JLabel("");
JButton btnUpdateComplete = new JButton("OK");
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
StackOverflow_Image_Resource_Demo window = new StackOverflow_Image_Resource_Demo();
尝试{lblstatusimg.seticon(新建ImageIcon(stackoverflow_image_resource_demo.class.getResource(“success.png”)));BtnUpdateComplete.SetVisible(true);}catch(异常e){Component frame=Null;lblstatusimg.seticon(新建ImageIcon(stackoverflow_image_resource_demo.class.getResource(“/resources/fail.png”));}catch(异常e){e.PrintStackTrace();}}});}
/**
* Create the application.
*/
public StackOverflow_Image_Resource_Demo() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frmUpdate = new JFrame();
frmUpdate.setType(Type.UTILITY);
frmUpdate.setTitle("StackOverflow Image Resource Issue Demo");
frmUpdate.setBounds(100, 100, 450, 300);
frmUpdate.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmUpdate.getContentPane().setLayout(null);
//JLabel lblStatusImg = new JLabel(""); - Commented out when I made lblStatusImg class level.
lblStatusImg.setIcon(new ImageIcon(StackOverflow_Image_Resource_Demo.class.getResource("/resources/updating.gif")));
lblStatusImg.setBounds(10, 22, 414, 97);
frmUpdate.getContentPane().add(lblStatusImg);
//JButton btnUpdateComplete = new JButton("OK"); - Commented out when I made btnUpdateComplete class level.
btnUpdateComplete.setVisible(false);
btnUpdateComplete.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent arg0) {
System.exit(1);
}
});
btnUpdateComplete.setBounds(170, 179, 89, 23);
frmUpdate.getContentPane().add(btnUpdateComplete);
}
}
有两件事来找。第一个是,正如您所说,您试图从静态上下文引用一个非静态变量。
第二个是,你似乎不明白线程是如何工作的……
基本上,main
通常在“main”线程中执行(当由JVM执行时)。
EventQueue.invokeLater(new Runnable() {
public void run() {
你应该做的是...
runnable
上下文中。setstatus
方法,该方法能够根据需要根据提供状态更改标签和UI内容例如...
public static final int SUCCESS = 0;
public static final int FAIL = 0;
//...
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
StackOverflow_Image_Resource_Demo window = new StackOverflow_Image_Resource_Demo();
// This e
window.frmUpdate.setVisible(true);
window.setStatus(StackOverflow_Image_Resource_Demo.SUCCESS);
} catch (Exception e) {
e.printStackTrace();
Component frame = null;
window.setStatus(StackOverflow_Image_Resource_Demo.FAIL);
JOptionPane.showMessageDialog(frame, "Update Failed", "Update Failed", JOptionPane.ERROR_MESSAGE);
window.dispose();
}
}
});
}
问题内容: 我有一个称为Keys.java的按钮类,它将按钮面板返回到名为Control.java的类。我在Control.java中有一个JLabel,但是我想做的是在按下按钮时更改JLabel。您将如何去做? 我试过在Keys.java中设置一个字符串,该字符串根据按钮而变化,然后将JLabel的文本设置为等于该字符串,但似乎不起作用。 关于如何实现这一点的任何想法? 问题答案: 可能是您更新
我想在切换项目时切换到底部导航视图的图标。 我有浅蓝色图标和深蓝色图标的选定项目。我正在为每个导航项目使用选择器drawable,但我看到下面这样的图像,灰色为非活动图像,蓝色为活动图像 这是我的代码 bottom_nav_menu 家 和选择器 计划程序选择器 设置选择器 收藏夹选择器 首页选择器 活动代码 我做错了什么?请帮助。。。 编辑:我正在使用以下绘图工具 在此处输入链接描述 在此处输入
问题内容: 这是我编写的代码: 问题答案: 那是正确的。布局管理器负责根据布局管理器的规则设置组件的位置。因此,在您的情况下,FlowLayout将覆盖组件的位置。 绝对不要对组件的位置进行硬编码。如果有人使用的分辨率小于1024 X 768怎么办?该组件将永远不会显示。 您也不应设置组件的大小。每个组件都有一个首选的大小。对于带有图像的标签,首选尺寸将是图像的尺寸。 阅读布局管理器,并使用适当的
问题内容: 我一直在尝试为我的Roguelike游戏添加一个JLabel。不幸的是,它似乎不起作用。到目前为止,这是我的代码: 我已经阅读了一些其他问题的解决方案,并且只需将JLabel添加到另一个解决方案中就可以完成。它不按这里的预期工作,为什么? PS:我不想为我的JPanel使用JLayeredPane。 问题答案: 不要使用组件(即JLabels)创建游戏环境。相反,您可以绘制所有游戏对象
我想用折叠的collapsingToolbar加载一个片段(即以非展开的形式)。当我在不改变appbarLayout布局参数的情况下设置collapsingToolbar的标题时,标题设置正确,我可以看到标题。 问题是,我还需要更改appBarLayout布局参数,以防止collapsingToolbar扩展(即,我希望它看起来和行为像这个特定片段的常规非折叠工具栏)。但是,这样做会使标题不再显示
问题内容: 我目前正在为我的应用程序实现主题支持,其中一部分是更改操作栏应用程序图标。选择“ Holo Light”时,我想使用深色图标。除了设置动作栏应用程序图标的部分以外,其他所有操作均通过该方法完成。我要使用的代码是: 我得到的错误是“这里没有这样的参考”。应该如何正确完成? 顺便说一句,我是那么没有动作吧Sherlock的东西。 问题答案: 您将操作栏扔在那里。返回的实例,然后您需要调用该