Java 如何禁用或启用按钮取决于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.*;

各位。我正在实现拖放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 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();
将为您提供yout
JList
中的组件数量


按钮。设置启用(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);