- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Java 中遇到 JLabel 渲染问题:我使用可观察的模式观察者,当我的模型通知我的 View JLabel 已更改 JLabel 的内容时,或者特别是在我的 JLabel 区域中显示的内容是随机的。有时它会渲染另一个面板中按钮的一部分,或者有时它会渲染我在 View 的其他组件中设置的颜色!但如果我最小化然后最大化我的框架,所有内容都会正确渲染。
抱歉我的英语不好。
这是当我单击某个按钮然后执行一些 OnUpdate()
时的渲染
编辑这是我的 JPanel 类,其中包含 JLabels:
class InformationPanel extends JPanel {
private static final int DEFAULT_INFO_WIDTH = Configuration.DEFAULT_INFO_PANEL_WIDTH;
private static final int DEFAULT_INFO_HEIGHT = Configuration.DEFAULT_INFO_PANEL_HEIGHT;
private String playerId;
private int numNaviVive;
private int numNaviAffondate;
private JLabel JLabelNumNaviAffondate;
private JLabel JLabelNumNaviVive;
public InformationPanel(String playerId) {
this.playerId = playerId;
numNaviVive = 0;
numNaviAffondate = 0;
JButton JButtonPlayerId = new JButton(playerId);
JLabelNumNaviAffondate = new JLabel(String.valueOf(numNaviAffondate));
JLabelNumNaviVive = new JLabel(String.valueOf(numNaviVive));
JLabel JlblNumNaviVive = new JLabel("Navi disponibili:");
JLabel JlblNumNaviAffondate = new JLabel("Navi affondate: ");
JButtonPlayerId.setBackground(new Color(0, 0, 0, 0));
JButtonPlayerId.setFont(new Font("Serif", Font.BOLD, 16));
JButtonPlayerId.setForeground(Color.YELLOW);
JButtonPlayerId.setFocusable(false);
JButtonPlayerId.setEnabled(false);
JlblNumNaviVive.setBackground(new Color(0, 0, 0, 0));
JlblNumNaviVive.setFont(new Font("Serif", Font.BOLD, 16));
JlblNumNaviVive.setForeground(Color.YELLOW);
JlblNumNaviVive.setDoubleBuffered(true);
JlblNumNaviAffondate.setBackground(new Color(0, 0, 0, 0));
JlblNumNaviAffondate.setFont(new Font("Serif", Font.BOLD, 16));
JlblNumNaviAffondate.setForeground(Color.YELLOW);
JlblNumNaviAffondate.setDoubleBuffered(true);
JLabelNumNaviAffondate.setBackground(new Color(0, 0, 0, 0));
JLabelNumNaviAffondate.setFont(new Font("Serif", Font.BOLD, 16));
JLabelNumNaviAffondate.setForeground(Color.YELLOW);
JLabelNumNaviAffondate.setFocusable(false);
JLabelNumNaviAffondate.setEnabled(false);
JLabelNumNaviVive.setBackground(new Color(0, 0, 0, 0));
JLabelNumNaviVive.setFont(new Font("Serif", Font.BOLD, 16));
JLabelNumNaviVive.setForeground(Color.YELLOW);
JLabelNumNaviVive.setFocusable(false);
JLabelNumNaviVive.setEnabled(false);
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
setPreferredSize(new Dimension(DEFAULT_INFO_WIDTH, DEFAULT_INFO_HEIGHT));
//setBackground(new Color(0, 0, 0, 0));
setBackground(new Color(0,0,0,40));
add(JButtonPlayerId);
add(JlblNumNaviAffondate);
add(JLabelNumNaviAffondate);
add(JlblNumNaviVive);
add(JLabelNumNaviVive);
setVisible(true);
}
public String getId() {
return playerId;
}
public int getNumNaviAffondate() {
return numNaviAffondate;
}
public int getNumNaviVive() {
return numNaviVive;
}
public void setNumNaviVive(int numNaviVive) {
this.numNaviVive = numNaviVive;
this.JLabelNumNaviVive.setText(String.valueOf(numNaviVive));
this.validate();
}
public void setNumNaviAffondate(int numNaviAffondate) {
this.numNaviAffondate = numNaviAffondate;
this.JLabelNumNaviAffondate.setText(String.valueOf(numNaviAffondate));
this.validate();
}
}
最佳答案
所有变量名称首先不应以大写字符开头。您的代码很难阅读,因为论坛认为您的所有变量都是类名并突出显示它们。遵循 Java 约定,不要创建自己的约定。
JLabelNumNaviAffondate.setBackground(new Color(0, 0, 0, 0));
变量默认是透明的,因此您无法为其设置背景颜色。您尝试设置透明颜色的事实可能是也可能不是您的问题。
setBackground(new Color(0,0,0,40));
这可能就是问题所在。您不能只在 Swing 组件上设置透明度,因为这会破坏绘画链。这是一个不透明组件保证绘制其自身的背景,但是当您使用透明度时,背景不会完全绘制,因此您会得到绘制伪影。
所以基本上你需要自己管理背景的绘制。所以你实际上需要让你的组件对父组件不透明,首先绘制,然后你可以绘制透明背景。
JPanel panel = new JPanel()
{
protected void paintComponent(Graphics g)
{
g.setColor( getBackground() );
g.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(g);
}
};
panel.setOpaque(false);
panel.setBackground( new Color(255, 0, 0, 20) );
frame.add(panel);
参见Background With Transparency获取更多信息和更简单的解决方案,这样您就不需要在所有组件上进行自定义绘制。
关于java - Java Swing 组件 onUpdate 渲染错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33958365/
这个问题在这里已经有了答案: How can I use an action to determine a control's visibility? (3 个回答) 7年前关闭。 当我通过将连接的
所以,我开发了一个 android 小部件,它应该用作按钮。我使用了这里给出的基本代码:http://developer.android.com/guide/topics/appwidgets/ind
我试图声明 create_time和 update_time MySQL 数据库中具有高精度(毫秒/微秒精度)。问题是我找不到正确的语法/函数来运行这两个要求。 到目前为止的假设/挖掘: 我找到了My
我有一个文章模型,它会根据它的标题有 slug,模型是这样的: from sqlalchemy.ext.declarative import declarative_base from sqlalch
当我更新数据库版本时,它并没有删除所有的表(以为我会是默认行为)。我还需要做其他事情吗? 最佳答案 您使用的是哪个 SQLiteOpenHelper? 检查生成的 DaoMaster 类。它有一个内部
我想制作一个类似于 Widget 的 CountDown 计时器。我希望它每秒更新一次。下面是我的代码。 onUpdate() 根本不会被调用,除了开始时调用一次。请指出我的问题。提前致谢。 JAVA
我正在为我的应用程序开发一个小部件。小部件名称是历史记录,当用户浏览任何 URL 时,我会将其存储在本地数据库中,从中列出哪个小部件。 当我打开小部件时,它会从本地数据库中获取所有详细信息并将其显示在
public class VWid extends AppWidgetProvider { public static String WIDGET_UPDATE = "WIDGET_UPDAT
我正在为 SQLAlchemy 开发一个 Audit mixin,但不确定具体该怎么做。 我的类(class)是这样的: class AuditColumns(object): created
我想创建一个具有两种小部件尺寸(4x2 和 4x4)的应用。 为此,我创建了两个接收器:
我有一个循环函数的情况,找不到解决方案。 有一个集合,其中有一个标志,表明数据是否已更改。还想记录更改。 export async function landWrite(change, context
在Delphi XE7中,我使用这个技巧根据ListView中的项目是否被选择来自动启用或禁用工具栏按钮(“编辑ListView项目”),以防止用户单击该按钮(如果有)没有选择 ListView 项目
我是 javascript 和 google 云函数的新手。我遵循了文档,但仍然不知道为什么 orderdata 返回未定义。 exports.updateordersumry = functions
UIView animatWithDuration对completion有一个可选参数,但是我对update需要一个参数 整个想法是我需要一个在动画的每个帧上运行的块。我想我可以用NSInterval
我想更新名为 recipes 的集合中文档中的两个字段,我使用了批量更新来完成它: let recipeRef = db.collection('recipes').doc(`${recipeId}`
我对 android appwidget 的 onUpdate 函数有疑问:我每天使用该函数更新一次 appwidget。在此之前,我使用 TimerTask 类来更新小部件,但 Android 有时
我一直在查看这个文档: http://andengine-doc.googlecode.com/hg/org/anddev/andengine/entity/modifier/SequenceEnti
我试图在升级时删除我的表,它会删除空表,但如果表中有行 - 它不会被删除。 我尝试了以下代码来首先清理表格: @Override public void onUpgrade(SQLiteDatabas
我的应用程序中有一个小部件,每次我安装/删除/更新第 3 方应用程序,因为 onUpdate() 方法可能被调用并且我编写的代码未正确执行。 可以肯定的是,AppWidgetManager 会响应以下
我的应用程序小部件从不转到 onUpdate 函数我添加了 3000 mili 用于测试,但除了第一次添加它之外,它永远不会进入 onUpdate 函数。 我做错了什么? 我的 list 文件:
我是一名优秀的程序员,十分优秀!