Java 如何禁用或启用按钮取决于Jlist中的组件数量
各位。我正在实现拖放GUI。 我现在想做的是禁用或启用GUI上的按钮,这取决于Jlist的组件数量 这是我的密码Java 如何禁用或启用按钮取决于Jlist中的组件数量,java,drag-and-drop,jbutton,jlist,Java,Drag And Drop,Jbutton,Jlist,各位。我正在实现拖放GUI。 我现在想做的是禁用或启用GUI上的按钮,这取决于Jlist的组件数量 这是我的密码 import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.File; import java.io.IOException; import java.util.List; import javax.swing.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.swing.*;
import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
@SuppressWarnings("serial")
public class FileDragDemo extends JPanel {
private JList list = new JList();
public FileDragDemo() {
list.setDragEnabled(true);
list.setTransferHandler(new FileListTransferHandler(list));
JScrollPane scrollPane = new JScrollPane(list);
JButton btnCompare = new JButton("Compare");
btnCompare.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
}
});
JButton btnAnalyze = new JButton("Analyze");
btnAnalyze.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
JButton btnRefresh = new JButton("Refresh");
btnRefresh.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DefaultListModel listModel = (DefaultListModel) list.getModel();
listModel.removeAllElements();
}
});
if (list.getModel().getSize() > 1){
btnAnalyze.setEnabled( false );
}
// if (listModel.getSize() > 1){
// btnAnalyze.setEnabled( false );
// }
GroupLayout groupLayout = new GroupLayout(this);
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 316, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING, false)
.addComponent(btnRefresh, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(btnAnalyze, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(btnCompare, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 144, GroupLayout.PREFERRED_SIZE)
.addGroup(groupLayout.createSequentialGroup()
.addContainerGap()
.addComponent(btnCompare)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(btnAnalyze)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(btnRefresh))
);
setLayout(groupLayout);
}
private static void createAndShowGui() {
FileDragDemo mainPanel = new FileDragDemo();
JFrame frame = new JFrame("FileDragDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
@SuppressWarnings("serial")
class FileListTransferHandler extends TransferHandler {
private JList list;
public FileListTransferHandler(JList list) {
this.list = list;
}
public int getSourceActions(JComponent c) {
return COPY_OR_MOVE;
}
public boolean canImport(TransferSupport ts) {
return ts.isDataFlavorSupported(DataFlavor.javaFileListFlavor);
}
public boolean importData(TransferSupport ts) {
try {
@SuppressWarnings("rawtypes")
List data = (List) ts.getTransferable().getTransferData(
DataFlavor.javaFileListFlavor);
if (data.size() < 1) {
return false;
}
DefaultListModel listModel = new DefaultListModel();
for (Object item : data) {
File file = (File) item;
listModel.addElement(file);
}
list.setModel(listModel);
return true;
} catch (UnsupportedFlavorException e) {
return false;
} catch (IOException e) {
return false;
}
}
}
import java.awt.datatransfer.DataFlavor;
导入java.awt.datatransfer.UnsupportedFlavorException;
导入java.io.File;
导入java.io.IOException;
导入java.util.List;
导入javax.swing.*;
导入javax.swing.GroupLayout.Alignment;
导入javax.swing.LayoutStyle.ComponentPlacement;
导入java.awt.event.ActionListener;
导入java.awt.event.ActionEvent;
@抑制警告(“串行”)
公共类FileDragDemo扩展了JPanel{
私有JList list=新JList();
公共文件dragdemo(){
list.setDragEnabled(true);
setTransferHandler(新的FileListTransferHandler(list));
JScrollPane scrollPane=新的JScrollPane(列表);
JButton btnCompare=新JButton(“比较”);
btnCompare.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件arg0){
}
});
JButton btnAnalyze=新JButton(“分析”);
btnAnalyze.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
}
});
JButton btnRefresh=新JButton(“刷新”);
btnRefresh.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
DefaultListModel listModel=(DefaultListModel)list.getModel();
listModel.removeAllElements();
}
});
如果(list.getModel().getSize()>1){
btnAnalyze.setEnabled(false);
}
//如果(listModel.getSize()>1){
//btnAnalyze.setEnabled(false);
// }
GroupLayout GroupLayout=新的GroupLayout(此);
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addComponent(滚动窗格,GroupLayout.PREFERRED\u大小,316,GroupLayout.PREFERRED\u大小)
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING,false)
.addComponent(btnRefresh、GroupLayout.DEFAULT\u SIZE、GroupLayout.DEFAULT\u SIZE、Short.MAX\u值)
.addComponent(btnAnalyze、GroupLayout.DEFAULT\u大小、GroupLayout.DEFAULT\u大小、Short.MAX\u值)
.addComponent(btnCompare,GroupLayout.DEFAULT\u SIZE,GroupLayout.DEFAULT\u SIZE,Short.MAX\u VALUE))
.addContainerGap())
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(滚动窗格,GroupLayout.PREFERRED\u大小,144,GroupLayout.PREFERRED\u大小)
.addGroup(groupLayout.createSequentialGroup()
.addContainerGap()
.addComponent(btnCompare)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(btnAnalyze)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(btnRefresh))
);
setLayout(groupLayout);
}
私有静态void createAndShowGui(){
FileDragDemo mainPanel=新建FileDragDemo();
JFrame=newjframe(“FileDragDemo”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(主面板);
frame.pack();
frame.setLocationByPlatform(真);
frame.setVisible(true);
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
createAndShowGui();
}
});
}
}
@抑制警告(“串行”)
类FileListTransferHandler扩展了TransferHandler{
私人名单;
公共FileListTransferHandler(JList列表){
this.list=列表;
}
public int getSourceActions(JComponent c){
返回拷贝或移动;
}
公共布尔值canImport(传输支持ts){
返回ts.isDataFlavorSupported(DataFlavor.javaFileListFlavor);
}
公共布尔输入数据(传输支持ts){
试一试{
@抑制警告(“原始类型”)
列表数据=(列表)ts.getTransferable().getTransferData(
DataFlavor.javaFileListFlavor);
if(data.size()<1){
返回false;
}
DefaultListModel listModel=新的DefaultListModel();
用于(对象项:数据){
文件=(文件)项;
listModel.addElement(文件);
}
list.setModel(listModel);
返回true;
}捕获(无支持的Lavore异常){
返回false;
}捕获(IOE异常){
返回false;
}
}
}
当Jlist中拖放的元素超过1时,我想禁用btnAnalyze。
另外,当Jlist中的drag和drop元素为1时,我想禁用btnCompare
请帮帮我。谢谢
myJList.getModel().getSize();
将为您提供youtJList
中的组件数量
和
按钮。设置启用(false)
将禁用您的按钮
好的,所以我真正做的唯一更改是将您的FileListTransfer处理程序移动到实际的类中,这样它实际上只是一个子类,然后全局声明按钮。试试看。基本上,我们正在使用Rakesh所说的内容,并检查大小,同时启用vs禁用
将转移类移动到与rest相同的类中
全局声明按钮
package assistance;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.swing.*;
import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
@SuppressWarnings("serial")
public class FileDragDemo extends JPanel {
private JList list = new JList();
private JButton btnCompare, btnAnalyze, btnRefresh;
public FileDragDemo() {
list.setDragEnabled(true);
list.setTransferHandler(new FileListTransferHandler(list));
JScrollPane scrollPane = new JScrollPane(list);
btnCompare = new JButton("Compare");
btnCompare.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
}
});
btnAnalyze = new JButton("Analyze");
btnAnalyze.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
btnRefresh = new JButton("Refresh");
btnRefresh.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DefaultListModel listModel = (DefaultListModel) list.getModel();
listModel.removeAllElements();
}
});
// if (listModel.getSize() > 1){
// btnAnalyze.setEnabled( false );
// }
GroupLayout groupLayout = new GroupLayout(this);
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 316, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED)
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING, false)
.addComponent(btnRefresh, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(btnAnalyze, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(btnCompare, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 144, GroupLayout.PREFERRED_SIZE)
.addGroup(groupLayout.createSequentialGroup()
.addContainerGap()
.addComponent(btnCompare)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(btnAnalyze)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(btnRefresh))
);
setLayout(groupLayout);
}
private static void createAndShowGui() {
FileDragDemo mainPanel = new FileDragDemo();
JFrame frame = new JFrame("FileDragDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
@SuppressWarnings("serial")
class FileListTransferHandler extends TransferHandler {
private JList list;
public FileListTransferHandler(JList list) {
this.list = list;
}
public int getSourceActions(JComponent c) {
return COPY_OR_MOVE;
}
public boolean canImport(TransferSupport ts) {
return ts.isDataFlavorSupported(DataFlavor.javaFileListFlavor);
}
public boolean importData(TransferSupport ts) {
try {
@SuppressWarnings("rawtypes")
List data = (List) ts.getTransferable().getTransferData(
DataFlavor.javaFileListFlavor);
if (data.size() < 1) {
return false;
}
DefaultListModel listModel = new DefaultListModel();
for (Object item : data) {
File file = (File) item;
listModel.addElement(file);
}
list.setModel(listModel);
if (list.getModel().getSize() > 1) {
btnCompare.setEnabled(true);
btnAnalyze.setEnabled(false);
} else if (list.getModel().getSize() == 1) {
btnCompare.setEnabled(false);
btnAnalyze.setEnabled(true);
}
return true;
} catch (UnsupportedFlavorException e) {
return false;
} catch (IOException e) {
return false;
}
}
}
}
一揽子援助;
导入java.awt.datatransfer.DataFlavor;
导入java.awt.datatransfer.UnsupportedFlavorException;
导入java.io.File;
导入java.io.IOException;
导入java.util.List;
导入javax.swing.*;
导入javax.swing.GroupLayout.Alignment;
导入javax.swing.LayoutStyle.ComponentPlacement;
导入java.awt.event.ActionListener;
导入java.awt.event.ActionEvent;
导入javax.swing.event.ListSelectionEvent;
导入javax.swing.event.ListSelectionListener;
@抑制警告(“串行”)
公共类FileDragDemo扩展了JPanel{
私有JList list=新JList();
私人JButton btnCompare、btnAnalyze、btnRefresh;
公共文件dragdemo(){
list.setDragEnabled(true);