有没有一种可靠的方法来计算字符串在JTextArea中如何划分成行?
我有一个固定宽度的JTextArea,当它被填充时,会添加一个新行并且它会垂直展开.
现在,我需要准确知道哪一行是哪一行.我可以使用字体指标添加单个字符宽度,但我不知道这是否可靠,或者是否有更好的方法.
字体指标"技巧"是唯一的方法吗?
有这篇文章:
有人跳了队!偶尔看来,一些挥杆事件在事件队列中以不正确的顺序处理(并且当有人切入队列时没有任何东西让我的血液沸腾)导致奇怪的行为.最好用小代码片段来说明这一点.阅读下面的代码段,仔细考虑您想象的事件发生的顺序.
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
repaint();
doSomething();
}
});
Run Code Online (Sandbox Code Playgroud)
大多数开发人员都认为repaint()方法将导致在doSomething()方法调用之前进行绘制操作.但事实并非如此,对repaint()的调用将创建一个新的绘制事件,该事件将添加到事件队列的末尾.只有当前的Action Event完成后才会处理(调度)此新的paint事件.这意味着将在调度队列上的新Paint Event之前执行doSomething()方法.
这里的关键点是调用repaint()将创建一个新的绘制事件,该事件将被添加到结束事件队列中而不会立即处理.这意味着没有事件跳过队列(我的血液可以保持在正确的温度).
我的问题是,我怎么能强迫的Swing做repaint();之前doSomething();?
此外,如果有方法调用repaint()WITHIN,doSomething();它们将仅在doSomething();完成后执行.有没有办法可以暂停doSomething();中间执行,然后投入reapaint();,完成它,然后恢复doSomething();?
到目前为止我找到的解决方案只有这个(链接),但它并不实用......
core.EditArea[,119,96,556x931,invalid,layout=javax.swing.BoxLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]
Run Code Online (Sandbox Code Playgroud)
我打印出一个JPanel,上面是输出.谁能告诉我"无效"部分的含义是什么?
更好的是,如果有人知道在哪里找到尽可能多的东西的解释System.out.print(thingy)输出的列表?
我想使用iText创建PDF.我想创建一个有序列表.但是,我想要将元素标记为:
a)
b)
c)
d)
etc...
Run Code Online (Sandbox Code Playgroud)
iText不支持这种标记,因为它有几个自己的预定义标记.有没有办法创建自己的标记(例如构建一个元素串并将其传递给正确的方法/构造函数),或者是篡改iText核心文件的唯一方法?
我打算使用它的列表最多只有5个元素,所以字母表的长度不是问题...
JDialog dialog = new JDialog(parent JFrame, "blabla");
dialog.setLayout(new BorderLayout());
JLabel label = new JLabel("more blabla");
dialog.getContentPane().add(label, BorderLayout.CENTER);
dialog.setSize(new Dimension(280, 80));
dialog.setLocationRelativeTo(parent JFrame);
dialog.setVisible(true);
//part of code that takes time to execute
//actually, I'm sending an email here, but it doesn't really matter what I do,
//as you will read below
dialog.dispose();
Run Code Online (Sandbox Code Playgroud)
我有上面的代码,它的用途是在执行某些代码时向用户显示消息(代码执行大约需要5-10秒,我不希望用户认为程序冻结).
问题是,添加到对话框中的JLabel根本没有出现.无论我添加到对话框中,它都不会出现.
但是,如果我将JDialog设置为modal(将true添加为上述构造函数的最后一个参数),它会出现,但是我想要执行的代码在对话框关闭之前不会运行,从而违背了它的目的.
由于它在代码中的位置,将要执行的代码并不重要,我尝试将其保留在当前的上面 - 根本没有执行代码 - 对话框会显示为瞬间,但我可以看到它空了.
我知道我可以创建一个构造窗口并说"待机10秒,代码正在执行",但我不想这样做.
我也尝试将JDialog换成JFrame,文本仍然不会出现.
我错过了什么?
Eclipse中是否有办法将一段代码绑定到快捷方式?
我经常使用System.out.println()进行测试和其他事情,如果我不得不按ctrl +某事而不是每次都输入它会更容易.
当我创建一个PDF文件时,我使用此代码附加一些信息,以使其对我的程序可读:
PdfDictionary dictionary = new PdfDictionary();
PdfObject object;
PdfName index;
ArrayList<String> content = getCompactData(document);
for (int i = 0; i < content.size(); i++)
{
object = new PdfString(content.get(i));
index = new PdfName(Integer.toString(i+1));
dictionary.put(index, object);
}
writer.getExtraCatalog().putAll(dictionary);
Run Code Online (Sandbox Code Playgroud)
当我打开程序时,我使用此代码来提取数据:
PdfDictionary dictionary = reader.getCatalog();
PdfName index;
PdfObject line;
ArrayList<String> data = new ArrayList<String>();
for (int i = 1; i < dictionary.size()-2; i++)
{
index = new PdfName(Integer.toString(i));
line = dictionary.getAsString(index);
data.add(line.toString());
}
Run Code Online (Sandbox Code Playgroud)
除了一个小细节外,一切都很好.诸如čšđćž之类的人物由于某种原因没有正确地传递给过程.一旦我尝试提取数据,我的程序就会变得混乱,无法识别这些字母.
几点说明:
所以我不知道哪里出错了.你呢?
所以,我在VS2017有一个项目,VS2017最近收到了更新。然后,我将所有 wxWidgets 模块作为项目添加到我的初始解决方案中,并处理了构建顺序,因此它们以正确的顺序构建。
但是,我总是收到此错误:
C:\Programs\Visual Studio 2017\Common7\IDE\VC\VCTargets\Microsoft.Cpp.Common.props(144,5): warning
MSB4211: The property "WindowsTargetPlatformVersion" is being set to a value for the first time, but it was already consumed at
"C:\Programs\Visual Studio 2017\Common7\IDE\VC\VCTargets\Microsoft.Cpp.WindowsSDK.props (29,5)".
Run Code Online (Sandbox Code Playgroud)
但它没有告诉我如何修复它。据我所知,单个项目的属性没有按照应评估的顺序进行评估。
如何定义属性表排序?我到底需要改变什么?
也不是我不能更改项目文件或任何连接到 wxWidgets 的东西,因为它是我存储库中的一个子模块,并且所做的任何更改都无法保存到存储库中。
有一个向量std::unique_ptr<A>。我需要将该数据传递给一个需要A.
我尝试使用std::transform,像这样:
std::vector<std::unique_ptr<A>> a;
std::vector<A> aDirect;
std::transform(a.begin(), a.end(),
std::back_inserter(aDirect),
[](std::unique_ptr<A> element)-> A { return *element; });
Run Code Online (Sandbox Code Playgroud)
但似乎在某个时候std::transform试图复制 的元素a,所以这不起作用,它在尝试引用已删除的函数时失败。
当然,我可以用 for 循环手动完成,但我想知道是否有更优雅的方法来做到这一点。
Main.scala:
package controler
object Main {
def main(args: Array[String]) {
import Utilites._
isJavaUpToDate
}
}
Run Code Online (Sandbox Code Playgroud)
Utilites.scala:
package controler
object Utilities {
def isJavaUpToDate = {
val javaVersion = augmentString(System.getProperty("java.version").substring(2, 3))
javaVersion >= 6
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?我已经进行了一系列不同的教程网站,这没有问题.
我总是说无法找到val Utilites.
PS为什么它只是在破坏代码时使用augmentString()来改变.toInt.
现在这给了我麻烦,一些关于隐式排序和方法orderTOOrdered.