2015-11-12 13 views
0

中的組件數量。我正在實現拖放GUI。 我現在想要做的是禁用或使我的GUI上的按鈕取決於Jlist組件的數量。如何禁用或使能按鈕取決於每個人的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; 
    } 
} 
} 

當JList的阻力和下降的元素都超過1,我想禁用btnAnalyze。 另外當在Jlist中拖放元素時,元素是1,我想禁用btnCompare。

請幫我一把。謝謝

+0

你能想澄清,要禁用btnAnalyze時只有一個條目d與比較相同嗎?這很容易做到,只需要更多的細節。 – basic

+0

對不起。 我想禁用btnAnalyze時,有2個條目abtnCompare abtCompare,我想禁用btnCompare時,有一個條目abtnAnalyze – user5497424

回答

0

好吧,我真正做出的唯一改變是將FileListTransfer處理程序移到實際的類中,以便它實際上只是一個子類,然後在全局中聲明這些按鈕。給它一個。基本上我們正在使用Rakesh所說的內容,並檢查它的大小和啓用與禁用之間的關係。

移動傳輸類爲同一個班休息

申報按鈕全球

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; 
     } 
    } 
    } 
} 

enter image description here

enter image description here

+0

我是否還必須在類FileListRansferHandler中聲明這3個按鈕?我試過你的方式在子類FileListRansferHandler中聲明3buttons,但它不起作用 – user5497424

+0

沒有。只要將FileListTransferHandler移動到FileDragDemo中作爲一個子應用程序,您應該可以訪問這些按鈕,就可以將它們聲明爲擁有它們的位置。 – basic

+0

然後3個按鈕沒有在子類FileListTransferHandler中聲明,所以它們不能被解析。方法importData不在類FileDragDemo中。它屬於FileListTransferHandler。 – user5497424

0
myJList.getModel().getSize(); 

會給你的組件數量JList

button.setEnabled(false);將會禁用您的Button

+0

謝謝,但我知道這兩條線,但我不知道在哪裏添加。我在FileDragDemo的構造函數中嘗試過,但它不起作用,並且它在執行動作的方法中也不起作用 – user5497424

相關問題