更新:6个月后,我刚刚遇到了这样的答案:索引结构是否合法?:Slava回答.我认为这是一个比这里提供的更好的解决方案,因为绝对没有未定义的行为.希望这对下一个人有所帮助,因为对我来说已经太晚了.
在您发表评论告诉我使用数组或向量或任何形式的容器之前,这是一个我不能做的事实.我知道,这将通过数组来解决,否则任何解决方案都非常"hacky".我很想用一个容器,但我绝对不能.
我是一家非常大的公司的中级开发人员,我们正在使用公司范围的库来通过以太网发送数据.有多种原因可以解释为什么它不能支持数组/向量,而是使用POD结构(普通旧数据 - 字符,浮点数,整数,粗体).我从一个浮点数开始,我必须使用它来填充具有相同浮点数的结构.由于这个库的目的是通过以太网发送消息,我只需要进行两次迭代 - 一次在发送上,一次在接收上.所有其他时间,此数据存储为数组.我知道 - 我应该将数组序列化并按原样发送,但我再说一遍 - 我绝对不能.
我有一个float[1024]
,必须遍历数组并填充以下结构:
struct pseudovector
{
float data1;
float data2;
float data3;
...
float data1024;
}
Run Code Online (Sandbox Code Playgroud)
我已经使用BOOST_PP_REPEAT和BOOST_PP_SEQ_FOR_EACH_I生成了这个结构,这样我就不必写出所有1024个浮点数,并且它增加了可维护性/可扩展性.
以同样的方式,我尝试通过预编译器##
连接(/sf/answers/2031466041/)迭代结构,但由于这是在预编译时完成的,因此不能用于运行 - 获取/设置时间.
我已经研究过如何实现反射,例如如何向C++应用程序添加反射?和Ponder Library,但这两种方法都要求您明确写出可以反映的每个项目.在这种情况下,我不妨std::map<string, float>
通过字符串/整数连接在for循环中创建并迭代:
for(i=0;i<1024;i++)
{
array[i] = map.get(std::string("data")+(i+1))
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以推荐一个更清洁的解决方案,不需要我写出超过1024行代码?非常感谢您的帮助!
我再说一遍 - 我绝对不能使用任何类型的数组/向量.
题:
在已经可见的JFrame上调用setVisible(true)有什么作用?我正在挖掘JFrame的源代码,最终,它归结为Component中的这个函数,如果它已经可见,它对框架什么都不做.它为什么表现得像revalidate(); repaint();
?(见下面的SSCCE)
动机:
我正在开发一个java应用程序,为此我编写了一个JImagePanel
扩展的类,JPanel
允许用户将图像设置为背景(请参阅SSCCE).我发现在编辑了面板的背景后,我遇到了将背景重新绘制为正确尺寸的问题.在浏览互联网后,我发现以下工作:
if(frame.isVisible()) frame.setVisible(true);
Run Code Online (Sandbox Code Playgroud)
最终,我使用了解决了这个问题
panel.revalidate();
panel.repaint();
Run Code Online (Sandbox Code Playgroud)
我认为这是更好的解决方案,但它让我思考setVisible(true)
在已经可见的框架上实际做了什么.从我的观点来看,它不应该起作用 - 但事实上确实如此.
SSCCE
这是一个说明我的问题的例子.如果没有别的,希望你将来发现这个课程非常有用.
注意:此文件的更新源可以在为其创建的项目的GitHub上的项目主页上找到.
请享用!
package com.dberm22.utils;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class JImagePanel extends JPanel {
private static final long serialVersionUID = 6841876236948317038L;
private Image img = null;
private Position …
Run Code Online (Sandbox Code Playgroud)