java - 如何在java SWING面板中添加Scrollable(滚动条组件)复选框?

标签 java swing checkbox scrollbar

已引用的问题 “how to restrict Joptionpane message dialog box prompting once for the Condition?

我的代码可能是一个基本完成的 GUI 程序。 我的代码是显示 Jfilechooser 选择的目录中的文件。

文件将以复选框的形式出现在框架中。问题是我将文件放入带有复选框的数组列表中,并尝试将其显示在框架上。

但问题是我无法在文本区域中创建这些文件,因为我无法在文本区域内获取组件。

因此文件(复选框)在面板中被粉碎。

我尝试应用滚动 Pane 以将其放入框架中并查看它。但我卡在某个地方,无法将滚动 Pane 应用于数组列表。

欢迎任何建议。 我需要在可视区域访问这些文件(复选框)。

这是我当前的输出: enter image description here

我总共有 1000 多个文件。所以我需要将它们放入滚动 Pane 中进行查看和选择。 (有时,当我读取 2000 多个文件时,GUI 会卡住)不知道为什么?

类似于我需要的示例输出。

enter image description here

full code below:

package latestprojectswing;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
public class latestswingpgm3 extends Thread implements ActionListener
{
 JFrame frame;
JPanel panel;
JTextField tf,text,tf1;
JTextArea ta,text1;
JLabel lab1;
String str;
JScrollBar scrol;
JScrollPane scrollPane;
File fl;
private JCheckBox chckbxSelectAll;
private JCheckBox chckbxf1;
private JTextField textField;
private JLabel lblSourceFolderfiles;
private JButton btnChoosedirectoryfrom;
private JButton btnDisplay;
private JLabel lblListFilesBelow;
private JScrollPane jScrollPane1;
ArrayList<JCheckBox> aL = new ArrayList<JCheckBox>();
int selectedCounter = 0;
int y=100;
JPanel contentPane;
String outputDir;
latestswingpgm3()
{
frame = new JFrame( "Search box" );
frame.getContentPane().setLayout( null );
frame.setSize( 820, 700 );

panel = new JPanel();
panel.setBounds( 25, 90, 750, 400 );
//panel.setLayout(null);
//panel.setBounds( 25, 90, 750, 400 );
scrollPane = new JScrollPane( panel );
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
//scrollPane.setBounds( 25, 90, 750, 300 );
scrollPane.setPreferredSize(new Dimension(500, 300));
//panel.setVisible(true);
scrollPane.setVisible(true);
frame.add(panel);
frame.add(scrollPane);

tf = new JTextField();
tf.setBounds( 25, 50, 750, 40 );
tf.setFont( new Font( "Latha", Font.BOLD, 20 ) );
tf.setHorizontalAlignment( JTextField.CENTER );
frame.getContentPane().add( tf );


chckbxSelectAll = new JCheckBox("Select All");
chckbxSelectAll.setBounds(25, 557, 97, 23);
frame.getContentPane().add(chckbxSelectAll);
chckbxSelectAll.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        Iterator<JCheckBox> i = aL.iterator();
        while(i.hasNext()) {
            JCheckBox tmp = i.next();
            if(chckbxSelectAll.isSelected()) {
                tmp.doClick();
            } else {
                tmp.setSelected(false);
                selectedCounter -= 1;
                if(selectedCounter < 0) {
                    selectedCounter = 0;
                }
                textField.setText(Integer.toString(selectedCounter));
            }

        }
    }
    });

JButton btnGenerate = new JButton("Generate");
btnGenerate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
    Iterator<JCheckBox> i = aL.iterator();
    while(i.hasNext()) {
        JCheckBox tmp = i.next();

        //scroll adder
        jScrollPane1 = new JScrollPane(frame);
        jScrollPane1.add(tmp);
        jScrollPane1.revalidate();
        if(tmp.isSelected()) {
            String filepathNName =  tf.getText() +"\\"+ tmp.getText();
            //filepathNName = System.getProperty("path.separator");
            String filename = tmp.getText();
            System.out.println("filename = " + filename);
            System.out.println("filepaname = " + filepathNName);
            System.out.println("outputDir = " + outputDir);
            boolean success = latestex1.exlCreator(filepathNName, outputDir, filename);

            if(success) {
                JOptionPane.showMessageDialog(null, "Successfully Completed. Pls refer to the path " + outputDir + " for output files");


            } else {

                JOptionPane.showMessageDialog(null, "OOPS. Some Error!!!");

            }
        }
    }

}
});
btnGenerate.setBounds(316, 604, 89, 23);
frame.getContentPane().add(btnGenerate);

textField = new JTextField();
textField.setBounds(268, 558, 86, 20);
frame.getContentPane().add(textField);
textField.setColumns(10);

JLabel lblNoOfFiles = new JLabel("NO of Files Selected");
lblNoOfFiles.setBounds(141, 561, 139, 14);
frame.getContentPane().add(lblNoOfFiles);

JLabel lblDestinationFolderTo = new JLabel("Destination PathTo Generate Files");
lblDestinationFolderTo.setBounds(553, 561, 226, 14);
frame.getContentPane().add(lblDestinationFolderTo);

JButton btnBrowse = new JButton("Browse");
btnBrowse.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {   

    JFileChooser chooser = new JFileChooser();
    chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
    int returnVal = chooser.showOpenDialog(frame);
    if(returnVal == JFileChooser.APPROVE_OPTION) {
        str = chooser.getSelectedFile().getAbsolutePath();
    }

    if ( str != null && !str.trim().equals( "" ) )
    {
        tf1.setText( str );
        outputDir = str;
      // Enable the search button
      //btnDisplay.setEnabled( true );
    }
    else
    {
   //btnDisplay.setEnabled( false );
    }
}
});
btnBrowse.setBounds(553, 583, 89, 23);
frame.getContentPane().add(btnBrowse);

tf1 = new JTextField();
tf1.setBounds( 553, 620, 400, 30 );
tf1.setFont( new Font( "Latha", Font.BOLD, 20 ) );
frame.getContentPane().add( tf1 );

lblSourceFolderfiles = new JLabel("Source Folder/ Files");
lblSourceFolderfiles.setBounds(6, 17, 138, 14);
frame.getContentPane().add(lblSourceFolderfiles);


btnChoosedirectoryfrom = new JButton("ChooseDirectory From");
btnChoosedirectoryfrom.addActionListener(this);
btnChoosedirectoryfrom.setBounds(141, 9, 170, 30);
frame.getContentPane().add(btnChoosedirectoryfrom);

btnDisplay = new JButton("Select To Display");
btnDisplay.setEnabled(false);
btnDisplay.setBounds(534, 9, 180, 30);
btnDisplay.addActionListener( this );

frame.getContentPane().add(btnDisplay);

lblListFilesBelow = new JLabel("List files Below to choose ");
lblListFilesBelow.setBounds(344, 17, 180, 14);
frame.getContentPane().add(lblListFilesBelow);
frame.setVisible( true );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}

public void actionPerformed( ActionEvent ae )
{
if ( ae.getActionCommand().equals( "ChooseDirectory From" ) )
{
  JFileChooser chooser = new JFileChooser();
  chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
  int returnVal = chooser.showOpenDialog(frame);
  if(returnVal == JFileChooser.APPROVE_OPTION) {
        str = chooser.getSelectedFile().getAbsolutePath();
    }

  if ( str != null && !str.trim().equals( "" ) )
  {
    tf.setText( str );

    // Enable the search button
    btnDisplay.setEnabled( true );
  }
  else
  {
 btnDisplay.setEnabled( false );
  }
}

if ( ae.getActionCommand().equals( "Select To Display" ) )
{
  if(aL!=null) {
      Iterator<JCheckBox> i = aL.iterator();
      while(i.hasNext()) {
          panel.remove(i.next());
      }
      selectedCounter = 0;
      textField.setText(Integer.toString(selectedCounter));
  }
  fl = new File( str );
  File[] flist = fl.listFiles();
  for ( int i = 0; i < flist.length; i++ )
  {
      if ( flist[i].isFile() )
      {
     final JCheckBox cb1 = new JCheckBox(flist[i].getName());


     scrollPane.add(cb1);
     panel.add(cb1);



     cb1.setBounds(25, y, 200, 25);
     cb1.setFont(new Font( "Latha", Font.BOLD, 20 ));
     cb1.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e){






                if(cb1.isSelected()) {
                    selectedCounter += 1;
                } else {
                    selectedCounter -= 1;
                    if(selectedCounter < 0) {
                        selectedCounter = 0;
                    }
                }
                textField.setText(Integer.toString(selectedCounter));
            }
         });
     aL.add(cb1);
     panel.add(cb1);
     y+=30;   
      }
  }
}
}

public static void main( String args[] )
 {
new latestswingpgm3();
}
}

最佳答案

您有几个问题:

关于java - 如何在java SWING面板中添加Scrollable(滚动条组件)复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35427546/

相关文章:

java - 在Struts2中,如何以HTML格式正确显示文本(从文本区域收集)?

java - Eclipse:使用里面的类更改现有包的名称

javascript - 根据 .jqGrid 中第一个复选框的选择读取第二个复选框的值

java - 在自定义对象 Firebase Android 中获取引用和 key

java - Android 如何在安装后立即执行特定操作?

Java Swing和绘图问题

使用 JFileChooser 后 Java JSlider 不显示

java - Swing翻译库

java - 扫描 ListView 中的复选框的方法

javascript - 除非选中指定数量的复选框,否则停止提交表单