Reputation:
Already Referenced question "how to restrict Joptionpane message dialog box prompting once for the Condition?"
My code is likely a GUI program mostly completed. My code is to display files from directories chosen by Jfilechooser.
THe files will come in form of checkbox in the frame.The problem is I put the files in a arraylist with checkboxes on it and tried to display it on the frame.
But the problem is I cant make those files in a textarea because I couldnt get components inside the textarea.
So the files(checkboxes) are shattered in the panel.
And I tried to apply a scroll pane to fit it in a frame and to view it.But I stuck somewhere I could not apply scroll pane to arraylist.
Any suggestions Welcomed. I need to access those files(checkboxes)in a viewable area.
totally im having 1000+files.So i need them to put in a scroll pane to view and select. (Sometimes the GUI gets stucks when I read 2000+files)DOnt know why?
Sample output LIKE which I needed.
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();
}
}
Upvotes: 1
Views: 2557
Reputation: 205785
You have several issues:
Use a JTable
in a JScrollPane
for tabular data.
To avoid blocking the event dispatch thread, which freezes the GUI, perform file I/O in the background using a SwingWorker
; a complete example is shown here.
To get a checkbox for each row, make sure the first column is of type Boolean.class
. The default editor and renderer will manage the checkbox for you; a complete example is shown here.
Upvotes: 2
Reputation: 75
I had similar problem with JListBox and ScrollPanel.
Solution was adding all components in 1 component, can be other kind of panel. Then adding that 1 big component to the JScrollPane.
Hope it helps.
EDIT01: I can´t access my code right now, so I compiled online. I hope you get the idea.
public static void main(String[] args) {
JFrame jFrame = new JFrame("Checkable list");
JPanel contentPane = new JPanel();
JPanel listOfFiles = new JPanel();
listOfFiles.setLayout(new BoxLayout(listOfFiles, BoxLayout.Y_AXIS));
JCheckBox ch1 = new JCheckBox("ch1");
JCheckBox ch2 = new JCheckBox("ch2");
JCheckBox ch3 = new JCheckBox("ch3");
JCheckBox ch4 = new JCheckBox("ch4");
JCheckBox ch5 = new JCheckBox("ch5");
JCheckBox ch6 = new JCheckBox("ch6");
JLabel lbl = new JLabel("inside the scroll");
listOfFiles.add(ch1);
listOfFiles.add(ch2);
listOfFiles.add(ch3);
listOfFiles.add(ch4);
listOfFiles.add(ch5);
listOfFiles.add(ch6);
listOfFiles.add(lbl);
JLabel lbl1 = new JLabel("Other stuff");
contentPane.add(lbl1);
JScrollPane jScrollPane = new JScrollPane(listOfFiles);
jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jScrollPane.setPreferredSize(new Dimension (200, 100));
contentPane.add(jScrollPane);
jFrame.add(contentPane);
jFrame.setSize(400, 300);
jFrame.setLocationRelativeTo(null);
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jFrame.setVisible(true);
}
Upvotes: 0