Tag: paintcomponent

使用paintComponent进行Java幻灯片图像延迟

我正在整理一个幻灯片程序,用于衡量用户在每张幻灯片上花费的时间。 幻灯片演示了几个不同的魔术技巧。 每个技巧都会显示两次。 在重复之间显示临时图像。 在每个技巧之间显示过渡图像。 在第一次重复播放时,在显示下一个图像之前,点击后,JPanel颜色在屏幕上闪烁。 在第二次重复相同的技巧期间不会发生这种情况。 图像可能需要很长时间才能加载。 是否有一种简单的方法来预加载图像,以便第一次没有延迟? NOTE: Original code deleted. 编辑2013年1月10日:此代码现在适用于较慢的计算机。 trashgod的第二个附录帮助最多。 mouseClick控件结构定期要求SwingWorker类加载40个或更少的当前技巧,同时还将使用过的图像设置为null。 我已经将我的代码简化为两个Image []并添加了一个main方法,因此它是独立的。 仍然需要运行图像。 现在这是非常简单的代码,如果你想用大量图片制作幻灯片,我认为这将是一个很好的起点。 注意:我想我在使用多个Image []时想出了如何正确实现SwingWorker。 trashgod和kleopatra这个实现符合你的建议吗? 我最终没有使用发布和进程,因为我无法弄清楚如何使用索引数组正常工作,但因为StringWorker没有加载数组中的所有图像(只有40)和代码调用StringWorker每20个图像,应该有一个相当不错的缓冲区。 编辑1/10/2013通过在Mouse类上扩展MouseAdapter来改变MouseListener。 还修复了我的paintComponent方法,以包含对super.paintComponent(g)的调用。 向我的SwingWorker类ImageWorker添加了发布/处理方法。 添加了一个包装类ArrayWrapper,允许传递imageArray [i]及其相应的索引int i并使用publish进行处理。 package slideshow3; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseAdapter; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import java.util.List; public class SlideShow3 extends JFrame […]

Java中的repaint()不会立即“重新绘制”?

我有这样的代码: // In MyPanel.java public void paintComponent(Graphics g) { super.paintComponent(g); // Draw something mypanel_count++; } // In Test.java public void testLargeData() { while (notDone) { panel.repaint(); // do huge work test_count++; System.out.println(“Test_count: ” + test_count + “, MyPanel_count: ” + mypanel_count); } } // Output !!! Test_count: 752, MyPanel_count: 23 Test_count: 753, MyPanel_count: 23 Test_count: […]

如何在Jframe java(eclipse)中加载图像

我有一个paneel.java文件,如下所示: import java.awt.*; import javax.swing.*; public class Paneel extends JFrame { public static void main ( String [] args ) { // frame JFrame frame = new Paneel(); frame.setSize ( 1000, 1000 ); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); frame.setTitle( “Remembory” ); frame.setVisible( true ); } class Gifpaneel extends JPanel{ private ImageIcon gif, animatedGif; public Gifpaneel() { gif […]

在图像上绘制JPanel中的形状

我需要在JPanel的JLabel中显示的图像上绘制形状(圆形或自由线)。 我的代码基于如何在拖动光标时绘制没有间隙的细线? 并使用2次鼠标单击绘制一个圆圈 。 代码如下。 问题是,当我开始绘制时,图像消失,只有在我停止后才会重新出现。 如果我评论行super.paintComponent(g); 但这并不会发生,但是当我绘制圆圈时,它会保留以前位置的路径。 public static void main(String args[]) { try { URL url = new URL(“http://sofzh.miximages.com/java/Porto-.jpg”); backgroundImage = ImageIO.read(url); } catch (Exception e) { e.printStackTrace(); } loadAnnotation(); loadBackground(); JFrame f; f = new JFrame(); f.setLayout(new BorderLayout()); f.add(mp); f.pack(); f.setVisible(true); } / *第0层:*加载背景图片* / public static void loadBackground() { JLabel lbImg […]

程序无法正确绘制屏幕

我一直在构建一个简短的程序,它基本上在JPanel上绘制一个太空船,并听取指示程序射击子弹的键。 问题是它甚至没有在屏幕上绘制宇宙飞船或子弹。 我还怀疑KeyBindings可能无法工作,因为这是以前的问题(我可能已经或可能没有修复),但手头的主要问题仍然是我的屏幕没有被绘制。 这是我的代码: public enum Direction { LEFT, RIGHT, SPACE } import javax.swing.JFrame; public class Main { public static void main(String[] args) { JFrame frame; Ship s1; Shoot shoot; // Set the frame up frame = new JFrame(); frame.setSize(400, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setResizable(false); frame.setVisible(true); // Get some more necessary objects s1 = new Ship(); shoot […]

绘画时关于Java绘图程序的多个问题

我有一个Java绘图程序,我有两个问题要处理它。 这两个问题都相对简单,只关注如何处理鼠标输入以及图像如何使用颜色。 这是应用程序的照片: 所以这是我的第一个问题: 正如您所看到的,从应用程序的外观来看,油漆区域上有一点点喷雾。 每个点都是鼠标点击。 用户按住鼠标按钮时程序无法识别,因此您必须单独单击。 这显然适得其反,用户不友好且不可接受。 现在,我如何解决这个问题,我不确定。 我尝试过使用永久while (true)循环,但这不起作用。 我如何制作它,以便不必每次都点击,每次按住鼠标时它会喷出点? 第二个问题是点的颜色。 如您所见,在底部有颜色按钮。 这些function,但有一个问题:每当我改变颜色时,屏幕上当前的所有点都会改变颜色。 颜色由名为currentColor的变量运行,该变量由由底部面板上的所有颜色按钮控制的actionListeners运行。 如何确保已经放置在屏幕上的颜色不再受影响? 我相信可以解决这两个问题的所有代码都在于我的自定义JPanel ,它用于程序绘制。 我将在下面发布整个课程,如果您有任何其他问题,请告诉我。 int xCord, yCord; public class PaintPanel extends JPanel implements MouseListener { // default serial whatever… private static final long serialVersionUID = -6514297510194472060L; public PaintPanel() { addMouseListener(this); } ArrayList points = new ArrayList(); @Override public void […]

摇摆中的球动画

问题是,当我调整JFrame的大小时,动画继续使用它为JComponent提供的预提供的维度。 有没有一种方法可以在我调整JFrame大小时更新我的width和height变量,以便动画可以与新的坐标一起运行。 简单来说,假设JComponent初始width = 300且height = 300 ,那么BALL会在这些指定Co-ordinates内移动。 现在,如果我调整JFrame的大小, JComponent的大小仍保持原样,即width = 300和height = 300 ,但我希望的是一种用当前窗口大小修改这些变量的方法。 如果我在解释我的问题时缺乏某些东西,请告诉我。 这是我正在使用的代码: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class BallAnimation { private int x; private int y; private int count; private int width; private int height; private int speedValue; private boolean flag; /* * These variables are used to […]

Swing – 未调用paintComponent方法

我只是实现了inheritanceJPanel的类,如下所示 public class Orpanel extends JPanel { …. @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D)g; g2d.setPaint(tpaint); g2d.fill(rect); } …. } Orpanel正在加载图像并调整它自己的大小。 这是问题。 调用JFrame的setContentpane(Orpanel的实例)使它工作正常但是当我将Orpanel附加到JFrame时调用add()方法而不是setContentpane(我知道setcontentpane并不意味着附加..无论如何),它不起作用。 最后想通了当我使用add()方法时,添加到JFrame的Component不会调用paintComponent()方法。 即使我手动调用repaint()方法,仍然不会调用paintComponent()方法。 我错过了什么? 任何帮助将不胜感激! 提前thx。 Jaeyong shin。 我添加了额外的代码。 public Test(OwPanel op) { super(); Dimension monitor = Toolkit.getDefaultToolkit().getScreenSize(); op.setBackground(Color.white); this.setBackground(Color.white); this.setBounds(monitor.width / 2 – 200 , monitor.height / 2 […]

调整JPanel大小后,组件消失

我试图创建JPanel与可拖动的十字架,鼠标点击后出现。 一切正常,但是当我调整JPanel的大小时,十字架就会消失。 我试图覆盖JPanel中的paintComponent方法,但是所有的十字都在坐标(0,0)处。 我该如何解决? import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionAdapter; import java.util.ArrayList; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; public class CrossPanel extends JPanel implements MouseListener { private int orderOfCross = 0; private ArrayList crosses; private int defaultSizeOfCrosses = 10; CrossPanel() { setOpaque(false); addMouseListener(this); crosses = new ArrayList(); } @Override public void […]

Java Swing循环进度条无法正常工作

我从Oracle站点发现了这个测试项目 ,因为我想在我的项目中添加一个循环进度条。 我正在使用Netbeans开发应用程序,当我启动应用程序时,应该是圆圈的JPanel ….令人失望。 我删除了所有无法解决此问题的代码,我已经得到了这段代码: import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import javax.swing.*; import javax.swing.plaf.LayerUI; public class Loading_Test extends javax.swing.JFrame { static final WaitLayerUI layerUI = new WaitLayerUI(); public Loading_Test() { JPanel panel = new JPanel(); JLayer jlayer = new JLayer(panel, layerUI); add(jlayer); initComponents(); } @SuppressWarnings(“unchecked”) private void initComponents() { setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); javax.swing.GroupLayout layout […]