本文将带您了解关于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 Animate JLabel
- Java Swing:将JLabel添加到JPanel
- java – 可以JLabel有img标签
- java – 在JLabel Icon上添加JLabel文本.使用相同的JLabel文本
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
因此,我正在创建一个基本应用程序,我希望在屏幕底部具有一个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
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标签
String html = "<html> hello </br> <img src = \"/absolute/path/here\" height = \"30\" width =\"40\"/> </html>"; JLabel l = new JLabel(html);
对于图像,我得到的是一个破碎的图像,是否可以将嵌入img标签嵌入JLabel?
编辑:
我想在JLabel中添加多个图像,所以我不认为使用ImageIcon会在这里做.
谢谢
解决方法
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 label = new JLabel(language.getString("translation")); label.setIcon(new ImageIcon(/* path of your icon */));
如果要修复文本重叠,则应设置文本对齐方式
像这样:
lblText.setHorizontalTextPosition(JLabel.CENTER);
我们今天的关于Java。将ImageIcon从面板1的JLabel拖放到面板2的JLabel。添加计数器功能和java图形面板怎么导入图片的分享就到这里,谢谢您的阅读,如果想了解更多关于Java Animate JLabel、Java Swing:将JLabel添加到JPanel、java – 可以JLabel有img标签、java – 在JLabel Icon上添加JLabel文本.使用相同的JLabel文本的相关信息,可以在本站进行搜索。
本文标签: