- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在按照下面提到的教程进行操作。在主题下Extending Default DnD Support本教程的第一个应用程序有一个 JTextArea
、一个 JList
和一个 JTable
。
而且效果很好。此外,我还使用了一个 JLabel
。我将此标签的传输处理程序设置为:
jLabel1.setTransferHandler(new TransferHandler("text"));
当我把这个标签拖到 table 上时,它不接受。但它适用于文本区域中的字符串。
如何将文本从标签拖放到表格中?
最佳答案
new TransferHandler("text");
https://docs.oracle.com/javase/8/docs/api/javax/swing/TransferHandler.html
This class is implemented to provide a default behavior of transferring a component property simply by specifying the name of the property in the constructor. For example, to transfer the foreground color from one component to another either via the clipboard or a drag and drop operation a TransferHandler can be constructed with the string "foreground". The built in support will use the color returned by getForeground as the source of the transfer, and setForeground for the target of a transfer.
JTable
没有setText(String)
方法。因此,您需要覆盖 TransferHander#importData(...)
方法以将数据导入到 JTable
的单元格中。
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class DnDTest {
public JComponent makeUI() {
JTable table = new JTable(5, 3);
table.setAutoCreateRowSorter(true);
table.setTransferHandler(new ToTransferHandler());
JLabel label = new JLabel("aaaaaaaaaaaa");
label.setTransferHandler(new TransferHandler("text"));
label.addMouseListener(new MouseAdapter() {
@Override public void mousePressed(MouseEvent e) {
JComponent c = (JComponent) e.getSource();
c.getTransferHandler().exportAsDrag(c, e, TransferHandler.COPY);
}
});
JPanel p = new JPanel(new BorderLayout());
p.add(new JScrollPane(table));
p.add(label, BorderLayout.SOUTH);
return p;
}
public static void main(String... args) {
EventQueue.invokeLater(() -> {
JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.getContentPane().add(new DnDTest().makeUI());
f.setSize(320, 240);
f.setLocationRelativeTo(null);
f.setVisible(true);
});
}
}
//@see https://docs.oracle.com/javase/tutorial/uiswing/dnd/dropactiondemo.html
class ToTransferHandler extends TransferHandler {
@Override public boolean canImport(TransferHandler.TransferSupport support) {
return getPropertyDataFlavor(String.class, support.getDataFlavors()) != null;
}
@Override public boolean importData(TransferHandler.TransferSupport support) {
// if we can't handle the import, say so
if (!canImport(support)) {
return false;
}
DataFlavor flavor = getPropertyDataFlavor(String.class, support.getDataFlavors());
// fetch the data and bail if this fails
String data;
try {
data = (String) support.getTransferable().getTransferData(flavor);
} catch (UnsupportedFlavorException | java.io.IOException e) {
return false;
}
JTable.DropLocation dl = (JTable.DropLocation) support.getDropLocation();
JTable table = (JTable) support.getComponent();
table.setValueAt(data, dl.getRow(), dl.getColumn());
return true;
}
//@see TransferHandler.java private DataFlavor getPropertyDataFlavor(...) {
private DataFlavor getPropertyDataFlavor(Class<?> k, DataFlavor[] flavors) {
for (int i = 0; i < flavors.length; i++) {
DataFlavor flavor = flavors[i];
if ("application".equals(flavor.getPrimaryType()) &&
"x-java-jvm-local-objectref".equals(flavor.getSubType()) &&
k.isAssignableFrom(flavor.getRepresentationClass())) {
return flavor;
}
}
return null;
}
}
关于java - 使用 transferHandler 将文本从 JLabel 拖放到 JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39072374/
我已经创建了一个蛇梯游戏,它运行良好,但现在我想对其进行一些修改。我希望每个玩家都有两个棋子/玩家而不是一个。现在的新规则变成,同一玩家的两个棋子可以占据同一个方 block ,因此我需要一种方法将它
抱歉标题含糊不清,但我想不出我想在标题中做什么。无论如何,对于图像上的文本,我使用了 JLabel 文本并将其添加到图标中。 JLabel icon = new JLabel(new Imag
我想将我的私有(private) jlabel 对象复制到一个新的 jlabel 对象并将新的 jlabel 对象公开。想法是允许任何人访问 jlabel 的属性,但不允许进行任何将显示在原始界面上的
我有一个由二维 int 数组组成的网格。 基本包含00、01、02等,无需赘述。 我有一种提取网格位置的方法,然后使用字符串生成器操作字符串,将其更改为“jxy”(x = 网格中的 x 位置,y =
我目前正在尝试将 tabIconLabels(即 JLabels)放在更大的 JLabel(tabAreaLabel)上(所有标签都附加有 ImageIcon)。我尝试使用 OverlayLayout
我一直在尝试将一个 JLabel 放在另一个 Roguelike 之上。不幸的是,它似乎不起作用。到目前为止,这是我的代码: public void updateDraw(int direction)
我正在为 Tic Tac Toe 项目开发 GUI,其中我希望在单击相应区域时显示图像(玩家的移动)。但是,我不知道如何在另一个 JLabel(背景)之上显示 JLabel(移动)。 我已经搜索并尝试
public void movePiece(JLabel destination){ JLabel currentPiece = piece[oldIndex[0]][oldIndex[1]];
我在这方面遇到了障碍,希望能得到一些见解。 这是我想要实现的基本要点: -我有一个 piece 类(扩展 JPanel),它有一个 JRadioButton 数组,以及一个 JLabel 根据选择的按
我有一个名为 iconLabel 的类,它扩展 JLabel 来制作按钮。我使用 Font Awesome 字体将 JLabel 的文本设置为图标。我还在构造函数中向 iconLabel 对象添加了另
我对Java真的很陌生,我想制作一个简单的GUI,其中有一个按钮,当你点击它时就会计数,我遵循this YouTube 上的教程即可实现这一目标。一切都很顺利,一切都很顺利。但有一件事没有,JLabe
假设我有一个 JLabel 大小 20x20。现在假设我添加了字符串“The Quick Brown Fox Jumps Over the Lazy Dog”。这句话对于 JLabel 来说太长,因此
我有以下代码: try { File file_background = new File( "C:\\Users\\xxxx\\Desktop\\ba
我使用 netbean 创建了一个 jframe,并向该 jframe 添加了一个 jlabel (changeLbl)。之后,我向该 jframe 添加了一个 jbutton。现在我需要创建一个新的
Game(){ JFrame frame = new JFrame("Display Image"); JPanel panel = (JPanel)frame.getContentP
我在 swing 中使用带有图标的 Jlabel。我从我的计算机中选择了一个图像作为图标,但我找不到一种方法让它自动调整为 Jlabel 的大小。因为我想要的图像比 Jlabel 的大小大得多,所以我
是否可以在另一个 JLabel 之上添加一个 JLabel?谢谢。 最佳答案 简短的回答是肯定的,因为 JLabel是 Container , 所以它可以接受 Component (JLabel 是
我试图在我的 GUI 中显示卡片,我想重叠卡片以节省空间。但是,我似乎无法让它工作。我目前正在使用 MigLayout,尽管感觉它更像是一个 JLabel 问题而不是其他问题。 要从高层次来描述它,请
我正在将布局设置为 null,我有一个具有宽高比的 JFrame,并且在调整大小期间,该框架保持相同的宽高比。 每次我调整框架大小时,我都会调整所有组件的大小,没有任何问题,只是使用 JLabel 调
现在,我正在开发另一个 JPanel与 9 JLabel每个分配有不同的 Color 。应用程序要做的是,当用户单击第一个面板时,除了 JLabel 的颜色发生变化之外,不会发生任何事情。将被注册到实
我是一名优秀的程序员,十分优秀!