相关疑难解决方法(0)

如何使图像大小适合JFrame大小?

我有JPanel一个JFrame.我在上面加了一张图片,JPanel但它只显示了图片的一部分:这是代码的一部分,我做了它:

JPanel panelImg = new JPanel()
{
    public void paintComponent(Graphics g)
    {
        Image img = new ImageIcon("Welcome.png").getImage();
        Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
        setPreferredSize(size);
        setMinimumSize(size);
        setMaximumSize(size);
        setSize(size);
        setLayout(null);
        g.drawImage(img, 0, 0, null);
    }
};
mainFrame.add(panelImg);
Run Code Online (Sandbox Code Playgroud)

所以这就是它的样子:

图片1

完整的图片如下所示:

在此输入图像描述

有没有办法将图片缩放到JFrames尺寸?提前致谢

java swing image jpanel jframe

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

设计启动画面(java)

我想设计一个启动画面,可以通过进度条显示当前的加载过程,就像netbeans启动画面一样,如图所示

loading... modules, done!.... loading modules and so on 
Run Code Online (Sandbox Code Playgroud)

加载完成后,主应用程序出现了.

我已经阅读了许多与仅创建启动画面相关的文章,但没有一篇文章涉及如何在启动画面上显示不同后台任务的进度.

我怎样才能做到这一点?

我可以将javafx 2用于启动画面,而应用程序的其余部分是使用java编写的

解决了!

我终于成功了. 我的错误是我正在更新任务线程中的GUI内容,因此我的任务线程被阻止,并且在GUI更新指令后无法执行下一条指令.现在,我在任务完成后移动了那些更新GUI指令,并且它正在工作....感谢Jewelsea走正确的道路.

java swing splash-screen javafx-2

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

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

我正在整理一个幻灯片程序,用于衡量用户在每张幻灯片上花费的时间.幻灯片演示了几个不同的魔术技巧.每个技巧都会显示两次.在重复之间显示临时图像.在每个技巧之间显示过渡图像.

在第一次重复技巧时,在显示下一个图像之前,点击后,JPanel颜色在屏幕上闪烁.在第二次重复相同的技巧期间不会发生这种情况.图像可能需要很长时间才能加载.

是否有一种简单的方法来预加载图像,以便第一次没有延迟?

NOTE: Original code deleted.
Run Code Online (Sandbox Code Playgroud)

编辑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
{
    //screenImage will be replaced with each new slide
    private Image screenImage;
    private int width;
    private int height;

    //Create panel for displaying images using paintComponent()
    private SlideShow3.PaintPanel mainImagePanel;

    //Used for keybinding
    private Action escapeAction;

    //Image array variables for each trick
    private …
Run Code Online (Sandbox Code Playgroud)

java image slideshow swingworker paintcomponent

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

java.awt.geom.Area减法后返回多个部分?

我想使用Java的Area类(java.awt.geom.Area)在各种多边形上执行减法和交集操作.

在许多这些情况下,减法操作可以将源区域分成两部分.在这些情况下,我需要返回两个Area对象,每个对象用于由减法操作创建的每个结果连续部分.

在阅读了Area类的JavaDocs之后,我似乎没有找到任何方法来返回Area的连续部分.事实上,我甚至不确定Area如何处理这种情况.

如何通过Area的减法或交叉方法获得所有生成的连续区域?

谢谢,-Cody

java geometry awt area

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

Swings ImageIcon构造函数非常慢

编辑:请参阅此答案的评论以回答此问题.TLDR:瓶颈是缩放图像,但分析显示这是ImageIcon构造函数中的一个问题.


$ java -version
Picked up _JAVA_OPTIONS: -Dswing.aatext=true -Dawt.useSystemAAFontSettings=on
java version "1.7.0_45"
OpenJDK Runtime Environment (IcedTea 2.4.3) (ArchLinux build 7.u45_2.4.3-1-x86_64)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
Run Code Online (Sandbox Code Playgroud)

我的应用程序在启动时加载1,380个图标.加载代码如下所示.使用SSD磁盘,ImageIcon构造函数调用实际上比磁盘读取更昂贵(尽管磁盘读取可能使用一些缓存...)

加载图标需要5.4s,在ImageIcon构造函数中花费3.2s.

有没有办法加快ImageIcon构建或使用其他东西?

private ImageIcon setIcon(LogicalIcon iconInfo, int size) {
    ImageIcon icon = iconImages.get(iconInfo.getIconName());
    if(icon == null) {
        BufferedImage image = null;
        try {
            image = ImageIO.read(getBestPreviewIcon(iconInfo).getFile());
            icon = new ImageIcon(ImageUtils.scaleDownTo(image, new Dimension(size, size)));
            iconImages.put(iconInfo.getIconName(), icon);
        } catch (IOException e) {
            // FIXME: Add a "Missing Image" icon
            e.printStackTrace();
        }
    }
    setIcon(icon); …
Run Code Online (Sandbox Code Playgroud)

java performance swing

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

加载bufferedImage会禁用JPanel的paintCompontent方法

我对BufferedImage和JPanel有点小问题.我正在创建一个带有2D动画的游戏.

基本上我有一个animationHandler,它将遍历图片,并根据旋转也将正确显示它.但问题是 - 当我加载图片时,我的Jpanel不会画任何东西.如果我注释掉自定义绘制方法,那么事件并不重要 - paintComponent方法不会绘制任何东西,而且它似乎跳过了paintCompontent方法.即使游戏没有崩溃并且计时器仍在运行 - 它也不会在扩展的JPanel中使用paintComponent方法.

包含计时器的类 - 通过JPanel.repaint()调用JPanel;

这是loadImg方法

/**
 * Test method to check animationHandler and bufferedImgs
 */
private void loadImages() {
    BufferedImage b_1;
    BufferedImage b_2;
    BufferedImage b_3;
    BufferedImage b_4;
    BufferedImage b_5;

    BufferedImage[] imgs = new BufferedImage[5];
    try {
        b_1 = ImageIO.read(new File("warlock1.png"));
        b_2 = ImageIO.read(new File("warlock2.png"));
        b_3 = ImageIO.read(new File("warlock3.png"));
        b_4 = ImageIO.read(new File("warlock4.png"));
        b_5 = ImageIO.read(new File("warlock5.png"));

        imgs[0] = b_1;
        imgs[1] = b_2;
        imgs[2] = b_3;
        imgs[3] = b_4;
        imgs[4] = b_5;

        animationHandler.addAnimation(imgs);
    } …
Run Code Online (Sandbox Code Playgroud)

java swing bufferedimage jpanel

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

在下载过程中使用swingworker更新JProgressBar

问题已解决!!!!!! 非常感谢trashgod和HoverCraftFullOfEels!我终于通过使用下面的例子并略微改变它来获得这个概念.更改允许缩放进度条(默认为100个单位).再次感谢您的耐心和愿意为此而努力.意味着很多人,~Kyte

ps - + 1全部'围绕:)

/** @see http://stackoverflow.com/questions/4637215 */
public class Threading_01 extends JFrame {

private static final String s = "0.00";
private JProgressBar progressBar = new JProgressBar(0, 100);
private JLabel label = new JLabel(s, JLabel.CENTER);

public Threading_01() {
    this.setLayout(new GridLayout(0, 1));
    this.setTitle("?2");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.add(progressBar);
    this.add(label);
    this.setSize(161, 100);
    this.setLocationRelativeTo(null);
    this.setVisible(true);
}

public void runCalc() {
//    progressBar.setIndeterminate(true);
    TwoWorker task = new TwoWorker();
    task.addPropertyChangeListener(new PropertyChangeListener() {

        @Override
        public void propertyChange(PropertyChangeEvent e) {
            if ("progress".equals(e.getPropertyName())) {
                progressBar.setIndeterminate(false);
                progressBar.setValue((Integer) e.getNewValue());
                System.out.println("**: " …
Run Code Online (Sandbox Code Playgroud)

java swing multithreading swingworker jprogressbar

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

如何在JMapViewer中将工具提示添加到MapMarker

我想要一个添加ToolTip到自定义MapMarkerJMapViewer。但是,取消搜索并不能帮助我解决这个问题。

自定义MapMarker为:

public class MapMarkerUnit extends MapObjectImpl implements MapMarker
Run Code Online (Sandbox Code Playgroud)

绘制方法的覆盖是

public void paint(Graphics g, Point position, int radio) {
    String filename = "marker.png";
    //System.out.print(filename);
    BufferedImage x = null;
    try {
        x = ImageIO.read(getClass().getResource(filename));
    } catch (IOException ex) {
        Logger.getLogger(MapMarkerUnit.class.getName()).log(Level.SEVERE, null, ex);
    }

    g.drawImage(x, position.x-16, position.y-37,null);

    //if(getLayer()==null||getLayer().isVisibleTexts()) paintText(g, new       Point(position.x+20,position.y));
}
Run Code Online (Sandbox Code Playgroud)

感谢您提供的任何帮助。

java jmapviewer

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