我在这里有这个代码:
public static String AddRemoveDays(String date, int days) throws ParseException
{
SimpleDateFormat k = new SimpleDateFormat("yyyyMMdd");
Date d = k.parse(date);
d = new Date(d.getTime() + days*86400000);
String time = k.format(d);
return time;
}
Run Code Online (Sandbox Code Playgroud)
它采用String形成"yyyyMMdd",并添加int天.它应该工作,那么日子是负面的 - 然后他会减去日期的日子.当它执行数学运算时,它返回格式化为"yyyyMMdd"的字符串.
至少这是应该做的.它适用于小数字,但如果我尝试添加(或删除),例如,一年(365或-365),它将返回奇怪的日期.
有什么问题?我应该以另一种方式做到这一点吗?
这是我的 Resources.class 中的一个方法:
public static Font loadFont(String fontFileName)
{
BaseFont base = null;
try
{
base = BaseFont.createFont(Resource.class.getResource(fontFileName + "_font.ttf").toString(), BaseFont.WINANSI, true);
}
catch (DocumentException | IOException e)
{
e.printStackTrace();
}
Font font = new Font(base, Font.BOLD, 15);
return font;
}
Run Code Online (Sandbox Code Playgroud)
我的程序的结构是:
src (folder)
core (package)
//all (but one) classes used for program
resources (package)
class Resources (used to load resources into the "core" classes)
wingding_font.ttf
Run Code Online (Sandbox Code Playgroud)
这是不起作用的代码片段:
p = new Phrase("some random text");
p.setFont(Resource.loadFont("wingding"));
pa = new Paragraph(p);
pa.setFont(Resource.loadFont("wingding"));
document.add(pa); …Run Code Online (Sandbox Code Playgroud) 这更像是一个逻辑问题/解释.
我有一个类似于MS Wrod的文本编辑程序.它的文档由页面组成.
一页是保存页面内容的JPanel(A).在JPanel(A)页面内容上添加了其他JPanels(B).页面的最后一个元素始终是填充所有未占用空间的填充程序.
我要做的是管理JPanel(B)迁移.当页面被填充时,最后一个应该被移动到下一个页面上,当页面上释放空间时,我必须检查下一个元素的第一个元素是否适合该空间并将其向上移动.
我尝试使用附加到Filler的组件侦听器来实现这一点.如果填充物高度达到零,则页面已满,如果它放大,则从页面中删除元素(或其高度降低).
看起来很简单,但也存在一些问题.JPanels(B)的尺寸并不完全相同.
这意味着,当从页面中移除JPanel(B)时,下一页中的多个JPanel(B)可能适合该空间.这也意味着如果页面的第一个JPanel(B)的高度减小,它也可能适合上一页(如果它的新高度小于prevous页面的Filler上的高度),也许如果减少是足够大,下一页的更多JPanels(B)可以附加到当前.
考虑到所有这些因素,可以基于此编写大量代码.但这一切都非常笨拙,因为它都是在组件监听器内完成的.
移动JPanels(B)将触发上一页/下一页的组件监听器.我可以通过在执行侦听器代码时添加一个布尔值设置为true来避免这种情况,并使侦听器仅在该布尔值为false时运行,但是根本不调用其他页面侦听器,这不再是好事,它们必须是最后调用.
我还想在这里添加一个子问题:如果我从另一个监听器调用一个监听器,它会运行immediatley还是在监听器完成之后?如果答案是在之后,如果我不止一次调用它,它会只运行一次或几次吗?如果从自身调用侦听器怎么办?
我的主要问题是,有没有一种方法可以在Java中以更简单的方式实现这种类似Word的页面内容管理?以某种方式创建了一组组件,它们以自动管理所有这些的方式排列(在JTextArea中自动换行)?
我只是Java和Swing的初学者,所以也许有一些组件可以用于此,或者当几个组合在一起时可能就像这样?也许有些布局管理?
如果我创建一些高JPanel,我可以根据页码增加/减少它的高度,也许我可以添加一些作为分隔符的垂直条带,如果在它之前添加一个组件,如果它的高度大于留给分隔符的空间,它会自动放到它之后吗?这样我就可以创造一种页面错觉.
这些只是一些想法,我希望其中一些是可能的,或者有人有更好的解决方案......
我有一个程序,可以为JPanel(in JScrollbar)添加一堆组件.但是,由于它添加了很多组件,因此大多数组件都不适合可见区域(Viewport).
当一切都加载并且我开始向下滚动时,我注意到组件进入该Viewport区域时,正在对齐并设置它们的位置.这导致我JScrollPane高于必要.这使得它在我到达终点时"快速"(组件突然向上移动(正确对齐),视口也是如此).
我试着打电话repaint()和validate(),但没有任何效果.我究竟做错了什么?
我有一个在EDT内执行的方法.它是这样的:
myMethod()
{
System.out.prinln(SwingUtilities.isEventDispatchThread());
for (int i = 0; i < 10; i++)
{
Thread.sleep(3000);
someJPanel.remove(otherJPanel);
}
}
Run Code Online (Sandbox Code Playgroud)
我期望发生的事情:十个JPanels将逐一从他们的父母中删除,每次删除之间有三秒钟暂停...
实际发生了什么:在所有10个元素一次被移除之后,一切都冻结了30秒.
控制台中的行始终为true(SwingUtilities.isEventDispatchThread()).
由于我在EDT中做了这一切,为什么瞬间变化呢?为什么它等待方法首先达到它的结束?
我应该如何改变我的代码以实现删除之间的三秒延迟?
我想创建一个看起来像JTextArea的JTextArea,像JTextArea一样,像JTextArea一样响应,像JTextArea一样说话,像JTextArea一样移动,但不是JTextArea.
为了缩短它,我想在JTextArea上创建一个100%的自定义swing组件.一旦我这样做,我将能够更改JTextArea的其他硬编码属性并创建我自己的自定义JTextArea.没有按照我需要的方式设计预定义的swing组件,但JTextArea是最接近的,这就是我选择它的原因.
我想改变JTextArea行的间距.不,我不想使用JtextPane,我已经尝试过,它不适用于我的程序,它不同地计算它的位置,它看起来不同,并且应用JtextArea边框只是进一步混乱.
我不是试图扩展JTextArea,我正在尝试创建一个自定义的JTextArea,就像在自定义swing组件中一样,改变了硬编码的属性,这些属性是不可配置的JTextAreas方法.
但是,我不知道该怎么做.我一直在互联网上查找它,但是只有一个关于从stracth构建自己的组件的广泛指南...
弄清楚这将花费大量时间,并不会真正解决我的问题.
我唯一需要做的就是创建一个包含构建JTextArea的每个类的类(或几个类).从JTextComponent级别开始,复制用于创建JTextArea的所有较低级别的类.我还要注意我使用Nibus的外观和感觉,我认为可能需要包含一些类,以便自定义JTextArea在该LAF下正常运行.
我查看了swing源代码,它充满了各种各样的东西.确定在创建JTextArea时使用哪些类或它们的部分将是一个耗时的噩梦,因为我不知道核心的摆动结构和机制.
这就是为什么我要求有知识的人至少列出我需要复制JTextArea的类,然后我会弄清楚如何编写它们.
因为,如果我现在开始学习摇摆核心机制,我需要花费数天和数周的时间来解决这一问题,但对于知道的人来说,只需几分钟就可以列出我需要关注的所有课程.关注.
我想在这里采取捷径.我不想完全理解挥杆,我只是希望这件事能够发挥作用.默认间距是一个像素太低,我想做的就是让它像素更高.我不想知道画家如何在屏幕上绘制组件,我只想知道它在哪里被调用以及它自称为什么......
感谢任何花时间的人.
我有个问题.
我有一个JFrame.它会创造一个JDialog.
当按下按钮时JDialog,应该处理它并发送电子邮件.与此同时,我需要另一个JDialog不确定的出现JProgressBar.发送电子邮件时,JDialog应该处理(和新的一个),或者它的内容应该更改.
我已经失败了好几个小时了,所以我问enyone他(或她)是否愿意给我写一个能做我想做的伪代码.
只是为了看看SwingWorker课程中应该包含什么(或者如果你觉得它更好的话就使用多线程),何时JDialog应该创建/处理,以及在电子邮件发送中的位置...
我知道我在这里要求一个完整的解决方案,但我已经在dedline并且已经失败了很多次......这是我的最后一招......
java ×7
swing ×5
jpanel ×2
fonts ×1
itext ×1
jscrollbar ×1
jtextarea ×1
nimbus ×1
resources ×1
swingworker ×1