GVKun编程网logo

Java。将ImageIcon从面板1的JLabel拖放到面板2的JLabel。添加计数器功能(java图形面板怎么导入图片)

19

本文将带您了解关于Java。将ImageIcon从面板1的JLabel拖放到面板2的JLabel。添加计数器功能的新内容,同时我们还将为您解释java图形面板怎么导入图片的相关知识,另外,我们还将为您

本文将带您了解关于Java。将ImageIcon从面板1的JLabel拖放到面板2的JLabel。添加计数器功能的新内容,同时我们还将为您解释java图形面板怎么导入图片的相关知识,另外,我们还将为您提供关于Java Animate JLabel、Java Swing:将JLabel添加到JPanel、java – 可以JLabel有img标签、java – 在JLabel Icon上添加JLabel文本.使用相同的JLabel文本的实用信息。

本文目录一览:

Java。将ImageIcon从面板1的JLabel拖放到面板2的JLabel。添加计数器功能(java图形面板怎么导入图片)

Java。将ImageIcon从面板1的JLabel拖放到面板2的JLabel。添加计数器功能(java图形面板怎么导入图片)

我已经在两个JPanel之间实现了这种非常基本的拖放操作,但这并不能真正满足我的要求!

public class test extends JFrame {{    JPanel mainpanel, storypanel, imageselect;    public test(){          mainpanel = new JPanel(new BorderLayout());          storypanel = new JPanel();          imageselect = new JPanel();            MouseListener listener = new MouseAdapter(){            public void mousePressed(MouseEvent e)        {            JComponent c = (JComponent) e.getSource();            TransferHandler handler = c.getTransferHandler();            handler.exportAsDrag(c, e, TransferHandler.COPY);        }        };            int j = 0;            BufferedImage myImages;            JLabel imgselect = new JLabel();            try { myImages = ImageIO.read(new File("four.jpg"));            //myImages[j] = resize(myImages[j]);            imgselect= new JLabel(new ImageIcon(myImages));            System.out.println(j);            imageselect.add(imgselect);            imgselect.addMouseListener(listener);            imgselect.setTransferHandler(new TransferHandler("icon"));            } catch(Exception e) {};            int i = 0;            BufferedImage storyimages;            JLabel storylabel = new JLabel();            //targetImg = new ImageIcon("lmkpackage/base/TargetImg.jpg");            try{ storyimages = ImageIO.read(new File("TargetImg.jpg"));            //storyimages[i] = resize(storyimages[i]);            storylabel = new JLabel(new ImageIcon(storyimages));            System.out.println(i);            storypanel.add(storylabel);             storylabel.addMouseListener(listener);            storylabel.setTransferHandler(new TransferHandler("icon"));            } catch(Exception e) {};            mainpanel.add(imageselect, BorderLayout.NORTH);            mainpanel.add(storypanel, BorderLayout.SOUTH);            getContentPane().add(mainpanel);        }        public static void main(String[] args){        System.out.println("Application Running");        JFrame mainframe =  new test();            mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        mainframe.setSize(1000,1000);            mainframe.setVisible(true);        }    }

对不起,我在这里不太清楚。我试图将ImageIcon从imageselect面板上的JLabel拖动到故事情节面板上的另一个JLabel。我可以使用上面的代码来做到这一点。但是,当我这样做时,可以从imageselect面板中拖动一个ImageIcon,然后在同一面板上替换另一个ImageIcon。我不希望这种情况发生。我也可以从故事情节面板拖到不需要的图像选择面板。

我并不是要成为傻瓜式的代码,我只是在寻找正确的方向!

编辑:我想知道有什么方法可以计算成功的拖放操作,下面的解决方案回答了我的原始问题。

答案1

小编典典

这基本上是@Andrew的评论的概述-由于您的SSCCE,很容易实现:-)

子类TransferHandler,重写canImport以检查源标签是否在imageSelect面板上,如果不是,则拒绝。

    // custom transferHandler which decides about imports based on source    TransferHandler handler = new TransferHandler("icon") {        @Override        public boolean canImport(TransferSupport support) {            return super.canImport(support)                     && support.getComponent().getParent() != imageSelectPanel;        }    };    // use the handler on all labels (handlers can be shared, btw)    // for each label on imageSelectPanel    imageSelectLabel.setTransferHandler(handler)    // for each label on the target panel (aka storyPanel)     storyLabel.setTransferHandler(handler)

Java Animate JLabel

Java Animate JLabel

因此,我正在创建一个基本应用程序,我希望在屏幕底部具有一个JLabel,该JLabel从左下角开始,然后在设置的时间内将动画样式移动到右下角,并在中心放置一个静态图像。为此,我使用BorderLayout用JPanel创建了一个JFrame。有一个JLabel,其中ImageIcon已添加到BorderLayout.CENTER,而JPanel位于BorderLayout.SOUTH。我的代码虽然草率编写,而且远非美观,但它是:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension; 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.BorderFactory;

public class GameWindow extends JPanel{

private static JLabel mainWindow,arrowLabel,arrowBox;
protected static JFrame frame;
protected static JPanel arrows;

public static int x = 600;

public GameWindow(){
    mainWindow = new JLabel("Center");
    arrowLabel = new JLabel("Moving");
    arrows = new JPanel();
    arrows.setSize(600,100);
    arrows.setLayout(null);
    arrowBox = new JLabel("");
    arrowBox.setBounds(0,150,100);
    arrowBox.setPreferredSize(new Dimension(150,100));
    arrowBox.setBorder(BorderFactory.createLineBorder(Color.black));
    arrows.add(arrowBox);
    this.setSize(600,600);
    this.setLayout(new BorderLayout());
    this.add(mainWindow,BorderLayout.CENTER);
    this.add(arrows,BorderLayout.SOUTH);
}

public static void main(String[] args)
{
    GameWindow g = new GameWindow();
    frame = new JFrame("Sword Sword Revolution");
    frame.add(g);
    frame.setSize(600,600);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

    Timer t = new Timer(1000,new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent e) {
            arrows.add(arrowLabel);
            arrowLabel.setBounds(x,100,100);
            x-=50;
            arrows.repaint();
            frame.repaint();
        }

    });
    t.start();
}
}

中心JLabel中的ImageIcon看起来很好,底部带有边框的空JLabel出现,但是我无法在屏幕上显示带有箭头图像的第二个JLabel。最终,我将更改为scheduleAtFixedRate以连续移动JLabel,但是现在我什至无法将图像显示在屏幕上。

我也了解到,我很可能将无法使用FlowLayout,因为我了解它不允许您设置组件的位置。我尝试使用null布局,但是使用null布局时,不会显示带有边框的空JLabel。我几乎无法辨认出边框底部的边框顶部,但是即使使用setLocation,我也无法将其显示在想要的位置。

显然,我的思考过程存在缺陷,因此可以提供任何帮助。

Java Swing:将JLabel添加到JPanel

Java Swing:将JLabel添加到JPanel

我只是想将JLabel添加到现有的JPanel中.这看起来很简单,我四处搜索.我认为这是对的,但标签没有出现在我的面板上.有谁看到我错过了什么?谢谢!

ResultsPanel myPanel = new ResultsPanel(pnlResults);  //pnlResults is an existing JPanel
myPanel.addLabel(pnlResults);

public class ResultsPanel extends JPanel {

    JPanel myPanel;

    public ResultsPanel(JPanel thisPanel) {
        myPanel = thisPanel;
    }

    public void addLabel(JPanel myResults) {
        JLabel myLabel = new JLabel("test",JLabel.LEFT);
        myPanel.setLayout(new FlowLayout());
        add(myLabel);        
    }

}

编辑:回应下面的即时回复,我同意这似乎是完全矫枉过正.我沿着这条路走下去,因为下面的代码也没有导致JLabel被添加到我的JPanel中:

JLabel myLabel = new JLabel("test"); 
pnlResults.add(myLabel);

我宁愿使用这个代码,所以如果你认为它更有可能工作(当然有一些修改),请随意评论.再次感谢!

解决方法

@H_301_22@ 这似乎是为了做一个基本的事情而跳过篮球;简单地打电话

JLabel label = new JLabel("Test text");//initialize the label
//do some stuff with label here maybe...
panel.add(label);//Now add it

没有必要让一个类扩展JPanel,并包含一个JPanel;如果一个类扩展了JPanel,要获取JPanel实例,只需使用它(因此addLabel会改为执行this.setLayout(blah)).但是,当然没有必要将JPanel子类化为像添加JLabel这样简单的东西

总的来说,这是最简单的挥杆应用程序:

JFrame frame = new JFrame("Basic Swing");//Make a frame
    frame.setSize(300,300);//Give it a size
    frame.setDefaultCloSEOperation(JFrame.disPOSE_ON_CLOSE);//Make it go away on close
    JPanel panel = new JPanel();//Make a panel
    frame.add(panel);//Add it to your frame

    JLabel label = new JLabel("Hello StackOverflow!");//Make a label
    panel.add(label);//Add it to the panel (which is on the frame)

    frame.setVisible(true);//Show the frame

java – 可以JLabel有img标签

java – 可以JLabel有img标签

我正在尝试显示一个JLabel,它有几行文本和图像,如下所示:
String html = "<html> hello </br> <img src = \"/absolute/path/here\" height = \"30\"  width =\"40\"/> </html>";
JLabel l = new JLabel(html);

对于图像,我得到的是一个破碎的图像,是否可以将嵌入img标签嵌入JLabel?

编辑:
我想在JLabel中添加多个图像,所以我不认为使用ImageIcon会在这里做.

谢谢

解决方法

而不是尝试在单个JLabel上拥有多个图像,为什么不简单地拥有许多JLabel,每个JLabel都有一个图像(如uthark描述的那样),然后将所有标签组合在一个JPanel上.这应该会给你带来你想要的效果,只需要极少的额外复杂性.

java – 在JLabel Icon上添加JLabel文本.使用相同的JLabel文本

java – 在JLabel Icon上添加JLabel文本.使用相同的JLabel文本

抱歉标题含糊不清但我想不出我想在标题中做什么.
无论如何,对于文本覆盖图像,我使用了JLabel文本并将其添加到Icon中.

JLabel icon = new JLabel(new ImageIcon);
    icon.setLayout(new GridBagLayout());
    add(icon);

    JLabel text = new JLabel();
    text.setText(language.getString("translation"));
    text.setLocation(10,10);
    text.setSize(text.getPreferredSize());
    icon.add(text);

我正在为我的应用程序做i18n,每次切换区域设置时,它都会将相同的JLabel添加到上一个,这样您就可以看到彼此重叠的文本了.如何使用相同的Jlabel而不是在顶部添加新的Jlabel?

谢谢

解决方法

我想你要创建的是带有自定义图标的JLabel

你应该创建一个JLabel并设置它的图标,如下所示:

JLabel label = new JLabel(language.getString("translation"));
label.setIcon(new ImageIcon(/* path of your icon */));

如果要修复文本重叠,则应设置文本对齐方式
像这样:

lblText.setHorizo​​ntalTextPosition(JLabel.CENTER);

我们今天的关于Java。将ImageIcon从面板1的JLabel拖放到面板2的JLabel。添加计数器功能java图形面板怎么导入图片的分享就到这里,谢谢您的阅读,如果想了解更多关于Java Animate JLabel、Java Swing:将JLabel添加到JPanel、java – 可以JLabel有img标签、java – 在JLabel Icon上添加JLabel文本.使用相同的JLabel文本的相关信息,可以在本站进行搜索。

本文标签: