小编Sav*_*sis的帖子

JFrame上的MouseListener

我希望在我的JFrame上收到有关鼠标事件(特别是鼠标输入和退出事件)的通知.但是当我向它添加一个mouselistener时,我得到的是框架边框上的事件,而不是整个框架的内容.

任何想法为什么?

编辑:或者至少你有另一种选择吗?我想要一个"gloabal"方式来捕获JFrame上的鼠标事件.也许一个mouselistener不是答案.

java events swing jframe mouseevent

5
推荐指数
2
解决办法
1万
查看次数

基于前提条件创建新实例的最佳方法

嗨我的问题是这个.假设您有一个接口,用于定义如何实现转换器.这个接口可以有一个方法loadDocument()和另一个convert().现在假设我们想要有多个转换器,ConvertHTML2DOC,ConvertXML2HTML等,你就会明白这一点.

假设您获得了转换为2个字符串所需的两种格式(无论如何获得它们都无关紧要).现在,您需要创建转换器的实例并转换文档.

我的问题是哪个更好:实际创建一个精心设计的if语句或通过Class类反射加载类?为了证明我写了一个我的意思的小例子.在我的例子中,我有两个共享一个接口的P1和P2类.我还创建了50000个以显示速度差异.事实证明,正常的调用稍微快一点,但我认为在一个复杂的例子中,例如我在开头提到的那个,通过Class方法创建类的好处更方便,更易于维护.你的想法是什么?

import java.util.*;

public class Test {
  public static void main(String[] args) {
    try {
      Random r = new Random();
      Date test1start = new Date();
      for (int i = 0; i<= 50000; i++){
        Printable p = (Printable)Class.forName("P"+(r.nextInt(2)+1)).newInstance();
        System.out.println(p.getString());
      }
      Date test1stop = new Date();
      Date test2start = new Date();
      for (int i = 0; i<= 50000; i++){
        Printable p;
        if (r.nextInt(2) == 0 ) {
           p = new P1();
        } else {
          p = new P2();
        }
        System.out.println(p.getString()); …
Run Code Online (Sandbox Code Playgroud)

java

4
推荐指数
1
解决办法
422
查看次数

如何在Java中加载大图像

我试图在Java中加载大图像文件,如果文件太大(我已经尝试通过命令行标志增加堆大小),我收到内存错误消息.

我用以下方式加载图像:

如果图像不是tiff图像我正在使用此代码:

BufferedImage img = ImageIO.read(fileToOpen);
Run Code Online (Sandbox Code Playgroud)

如果文件是tiff,我使用此代码:

BufferedImage img = JAI.create("fileload", 
    fileToOpen.getAbsolutePath()).getAsBufferedImage();
Run Code Online (Sandbox Code Playgroud)

我的问题实际上归结为:图像处理程序(例如Photoshop)如何加载数百兆字节的文件而不会出现内存错误?

我的理解是,20MB jpeg很难加载到内存中的原因是因为在加载到BufferedImage时,例如你以未压缩的方式保存图像.因此,一种可能的解决方案是拥有一个Java类,该类是Image抽象类的子类,但以压缩形式存储数据.但这可能会有速度问题,因为运行时机器必须在绘制时解压缩数据.另一个选择是将原始未压缩数据缓存到磁盘并从那里无缝读取,但速度问题仍然存在.

那么大男孩怎么做呢?Photoshop如何在内存中加载200MB jpeg并绘制所有分辨率而没有任何明显的问题?

(最后注意:在我的应用程序中,由于速度问题,我得到我的BufferedImage后,我将其内容绘制到具有相同尺寸的VolatileImage上.这大大提高了绘图速度)

java image

4
推荐指数
1
解决办法
6575
查看次数

递归SamePropertyValues作为hamcrest中的匹配器

我正在寻找一个Hamcrest匹配器,其行为与SamePropertyValuesAs相同,但附加的扭曲是,如果属性不是基元,标准Java类之一(字符串,整数等),或其中一个的复合(集合)或者数组)然后它也将对这些属性进行递归匹配.

那里有这样的匹配器还是我必须自己动手?

java tdd unit-testing hamcrest matcher

4
推荐指数
1
解决办法
2864
查看次数

eclipse的垃圾收集器是否与默认值不同?

从这里发布的问题和我的旧问题中我得到的印象是,无论何时你都不能明确地运行Java垃圾收集器.

如果你打电话给它,你只需指示系统只要能够或认为合适就给它打电话.

但在eclipse中,如果按"运行垃圾收集器"按钮,您会看到内存使用量立即减少.怎么可能?eclipse是否使用不同的垃圾收集器,是否可以访问我们没有的秘密API,或者我对GC的工作原理有何看法?

java eclipse garbage-collection

3
推荐指数
1
解决办法
1209
查看次数

JSplitPanel(或JTabbedPane)出了什么问题?

我有两个面板,我希望向用户显示.我决定将它们添加到JTabbedPane中.我还想让用户同时并排查看它们.所以我将两个面板添加到我的JTabbedPane,然后我创建了一个JSplitPanel:

    tabs.addTab("Align Image Points", imageControlPanel);
    tabs.addTab("Align Map Points", mapControlPanel);
    JSplitPane splitPane = new JSplitPane(
            JSplitPane.HORIZONTAL_SPLIT, true, imageControlPanel,
            mapControlPanel);
    tabs.addTab("Side by side view", splitPane);
Run Code Online (Sandbox Code Playgroud)

生成的JTabbedPane只有一个选项卡!当我删除JSplitPane一切正常.两个标签.我然后尝试简化问题发布在这里,我想出了这个:

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;

public class Test {

    public static void main(String[] args) {
        JFrame f = new JFrame("Test");
        JButton b1 = new JButton("First");
        JButton b2 = new JButton("Second");
        JSplitPane s = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,b1,b2);
        JTabbedPane tabs = new JTabbedPane();
        tabs.addTab("First", b1);
        tabs.addTab("Second", b2);
        tabs.addTab("Both", s);
        f.getContentPane().add(tabs);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setVisible(true);
    }

}
Run Code Online (Sandbox Code Playgroud)

这给了我另一个问题!它显示3个选项卡,但第三个选项卡的分割窗格显示没有按钮! …

java swing jtabbedpane

2
推荐指数
1
解决办法
1492
查看次数

在继续之前等待Swing完成更新JProgressBar

我有JFrame一个CardLayout集作为其布局管理.它有两个JPanel子类.一个是面板,WordsLoadingPanel显示文本"Loading words ..."并且有一个JProgressBar.另一个必须实际加载单词.这需要一段时间(对于100个单词大约10-14秒;这是一个非常有选择性的算法),所以我想向用户保证该程序仍在工作.我在面板中使用加载算法激活属性更改firePropertyChange(String, int, int),并且WordsLoadingPanel正在捕获更改 - 我知道这是因为我为此事件添加了一个侦听器来执行println,并且它可以工作.但是,当我更改println为实际更改JProgressBar的值时,它不会执行任何操作.我知道我正在改变这个值,因为如果我在算法开始之前设置了值,它就可以工作,并且它适用于循环的最后一次迭代.我猜这是因为我的算法正在吃掉计算能力,不会让JProgressBar更新.

所以,我的问题是:如何让我的算法等待Swing(这是AWT调度线程?)在继续之前完成更新进度条?我试过了:

  • Thread.yield 在循环的每次迭代中
  • Thread.sleep(1000L) 在循环的每次迭代中,在try/catch中
  • 将所有内容放入循环中 SwingUtilities.invokeLater(Runnable)
  • 只将CPU密集型算法放入 SwingUtilities.invokeLater(Runnable)

编辑:为了进一步支持我的CPU为食算法的假设(听起来像一个孩子的故事...),当我设置JProgressBar不确定的,它只是开始移动的算法结束.

有没有人有什么建议?

谢谢!

java performance swing multithreading

2
推荐指数
1
解决办法
1165
查看次数

TreeMap不排序

public int compareTo(Object o) {
    Doctor d = (Doctor)o;
    return (doctor_name.compareTo(d.doctor_name));
}
Run Code Online (Sandbox Code Playgroud)

这是我在博士课上的可比性

jTextArea.setText("");
int doctor_id = Integer.parseInt(jTextField2.getText());
String doctor_name = jTextField3.getText();
String hospitalName = jTextField4.getText();

Doctor d = new Doctor(doctor_id,doctor_name,hospitalName);
hmDoctor.put(doctor_id, d);
Run Code Online (Sandbox Code Playgroud)

这是我的hashmap

这是我的树图

TreeMap<Integer,Doctor> tmDoctor = new TreMap<Integer,Doctor>(hmDoctor);
jTextArea.setText("");
Set keys = tmDoctor.keySet();
Iterator<Integer> ite = keys.iterator();

while(ite.hasNext())
{
    int doctorID = ite.next();
    Doctor d = tmDoctor.get(doctorID);
    tmDoctor.put(doctorID, d);
    jTextArea1.append(d.toString());
}
Run Code Online (Sandbox Code Playgroud)

它没有对医生姓名进行排序.为什么?

java treemap

1
推荐指数
1
解决办法
362
查看次数

如何生成随机字符

我是android开发的新手.我一直在阅读教程,学习和测试.

我正在制作我自己的个人应用程序,我需要知道如何在AZ和0-9之间生成一串字母和字母.

如果有人可以提供帮助,这将是一种贬义.

random android

-4
推荐指数
2
解决办法
5649
查看次数