用Swing开发GUI。 我有一个自定义对话框来select要在我的应用程序中打开的文件; 它的类扩展了javax.swing.JDialog并且在其他组件中包含了一个JFileChooser ,可以切换为显示或隐藏。 JFileChooser组件已经自己处理了ESC键:当文件select器显示出来(embedded在我的对话框中),然后按下ESC键,文件select器自动隐藏起来。 现在我想让我的对话框做同样的事情:当我按ESC时,我想closures对话框。 请注意,在显示embedded式文件select器时,ESC键应该只隐藏它。 有任何想法吗 ?
我经常听到Swing图书馆缺乏线程安全性的批评。 然而,我不确定我在自己的代码中做什么可能会导致问题: 在什么情况下,Swing不是线程安全的呢? 我应该主动避免做什么?
我有一个Java程序,在一个单独的(非EDT)线程上执行一个严格的循环。 尽pipe我认为Swing UI仍然可以响应,但事实并非如此。 下面的示例程序显示了这个问题:单击“尝试我”button应该会在半秒钟后或多或less地popup一个对话框,并且应该可以通过单击任何响应来立即closures该对话框。 相反,对话框需要更长的时间才能显示,并且/或者点击其中一个button需要很长时间才能closures。 问题发生在Linux(两个不同的发行版),Windows,Raspberry Pi(仅限服务器VM)和Mac OS X(由另一个SO用户报告)上。 Java版本1.8.0_65和1.8.0_72(都尝试过) i7处理器拥有多个内核。 EDT应该有足够的备用处理能力。 有没有人知道为什么EDT处理被延迟,即使只有一个繁忙的线程? (请注意,虽然Thread.sleep调用的各种build议是造成问题的原因,但它不是,它可以被删除,问题仍然可以被复制,尽pipe它显示的频率稍低,并且通常performance出上述第二种行为- 即没有响应的JOptionPane对话框,而不是延迟的对话框外观,而且,没有任何理由让睡眠调用产生到另一个线程,因为上面提到了备用的处理器内核 ; EDT可以继续在另一个内核上运行呼叫sleep )。 import java.awt.EventQueue; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; public class MFrame extends JFrame { public static void main(String[] args) { EventQueue.invokeLater(() -> { new MFrame(); }); } public MFrame() { JButton tryme = new JButton("Try me!"); tryme.addActionListener((e) […]
我正在写一个Mandelbrot分形浏览器,我想以一种聪明的方式实现颜色循环。 给定一个图像,我想修改它的IndexColorModel。 据我所知,没有办法修改IndexColorModel,也没有办法给一个图像一个新的IndexColorModel。 事实上,我认为没有办法提取其颜色模型或图像数据。 看来,唯一的解决scheme是坚持用于创build图像的原始图像数据和调色板,手动创build一个新的调色板与旋转的颜色,创build一个新的IndexColorModel,然后从数据创build一个全新的图像和新的颜色模型。 这一切似乎是太多的工作。 有没有更简单快捷的方法? 这是我能想出的最好的解决scheme。 此代码创build一个1000×1000像素的图像,并显示以每秒30帧循环的颜色animation。 (旧) import java.awt.*; import java.awt.event.*; import java.awt.image.*; import javax.swing.*; public class ColorCycler { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } private static void createAndShowGUI() { JFrame jFrame = new JFrame("Color Cycler"); jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jFrame.add(new MyPanel()); jFrame.pack(); jFrame.setVisible(true); […]
我正在用Java Swing编写一个应用程序。 我需要的是一个程序,我可以使用graphics界面中的button来停止“精化”线程。 这里有一个简单的项目,侧重于我所需要的 import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JTextArea; /* * To change this template, choose Tools | Templates * and open the template in the editor. */ /** * * @author Nikola */ public class Main extends javax.swing.JFrame { private MyThread THREAD; public Main() { initComponents(); } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> […]
我需要将给定的任何图像转换为字节数组以满足encryption要求。 我使用JProgressBar来监视转换进度,以防所选图像很大: File p= new File("C:\"); BufferedImage oImg = ImageIO.read(p); ByteArrayOutputStream ba = new ByteArrayOutputStream(); ImageIO.write(oImg, "jpg", ba); ba.flush(); ProgressBar pb = new ProgressBar(); Thread thread = new Thread(pb); thread.join(); pb.fireTask(ba.toByteArray()); 我定义了一个使用SwingWorker的ProgressBar类,如下所示: public class ProgressBar extends JPanel implements Runnable { private JProgressBar progressBar; private Task task; private byte[] imgByteArray; public void run() { createGUI(); } […]
我已经看到,在Photoshop中的文本可以很容易地resize拖动它们。 我们如何在Java中做同样的事情? 任何想法如何调整文本在Java中? 添加了在Photoshop中调整字母“A”的快照 请让我知道这个代码有什么问题? public class ResizeImage extends JFrame { public ResizeImage(){ JPanel panel = new JPanel(){ public void paintComponent(Graphics g) { // In your paint(Graphics g) method // Create a buffered image for use as text layer BufferedImage textLayer = new BufferedImage(240, 240, BufferedImage.TYPE_INT_RGB); // Get the graphics instance of the buffered image […]
我正在尝试使image processing框架类似于像Photoshop或Paint Shop Pro中发现的image processing框架,我遇到了问题。 现在我有一个JDesktopPane的JFrame窗口。 当我点击一个button,一个JInternalFrame是由其中的以下组件: imageLabel = new JLabel("picture.png"); scrollPane.setViewPort(imageLabel); internalFrame.add(scrollPane); // I also tried with a BorderLayout() desktopPane.add(internalFrame); 我的问题是这样的:如果JLabel小于JInternalFrame,我不希望JLabel或JScrollPane拉伸到JInternalFrame的大小。 我已经尝试用“空”JLabel填充JLabel周围的空间。 我试过切换JScrollPane的布局样式。 我已经尝试将JLabel和JScrollPane的首选和最大尺寸设置为picture.png的尺寸。 没有任何工作,我需要什么。 我不希望JLabel周围的空白“空格”成为JScrollPane或JLabel的一部分,这样我就可以使用各种MouseEvent触发图片本身,而不是每当“拉伸的”JLabel或JScrollPane留下的空间我调整了JInternalFrame的大小。 提前致谢。 编辑1:这是一些突出显示问题的代码。 import java.awt.*; import java.awt.event.*; class fooFrame extends JFrame implements MouseListener { private static fooFrame frame; JLabel fooLabel; public fooFrame() { JDesktopPane background = new JDesktopPane(); JInternalFrame […]
我有个问题。 我有一个JFrame 。 它会创build一个JDialog 。 当按下JDialog上的button时,它应该被丢弃,并发送一封电子邮件。 同时,我需要另一个JDialog以确定的JProgressBar出现。 当发送电子邮件时, JDialog应该被丢弃(并且新build一个)或者它的内容应该改变。 现在我已经失败了好几个小时了,所以我现在要问的是,如果他(她)能够给我写一个可以做我想做的伪代码的话。 只要看看SwingWorker类中应该包含什么(或者如果你认为它更好,可以使用multithreading),当创build/处理JDialog时,以及在哪里发送邮件… 我知道我在这里要求一个完成的解决scheme,但我已经在一个专业上,已经失败了很多次了…这是我的最后一招…
我想用一些文本字段来开发一个表单。 例: Name SecondName 这个想法是,每个文本字段内都有一个文本,如: Insert your name Insert your second name 当你点击第一个文本字段来写你的名字,文本“插入你的名字”必须被删除…相同的必须发生的第二个文本字段(SecondName)。 效果必须是这样的: 我认为我只需要在文本字段上需要一个Action,当用户在文本字段上按下鼠标时,必须唤醒它,这有可能吗? 谢谢