ArrayList i CCombo

0

Witam, mam problem z ArrayList i umieszczeniem danych z niej w CCombo.
Liste utworzyłem tak:

ArrayList<String> lista= new ArrayList<String>();	
String[] arr1 = lista.toArray(new String[lista.size()]);

//dodanie elementów
public void testadd(){
	lista.add("ab");
	lista.add("cd");
}

do CCombo przypisuje elementy tak:

ccombo.setItems(arr1);

niestety nie wyświetla mi nic w tym CCombo, w czym może tkwić problem?

0

Nie wiem jak Ci się to kompiluje, albo jakiej Javy Używasz, ale w dokumentacji ósemki nie ma metody setItems(E item). Możesz za to przekazać tablicę w konstruktorze.
Zobacz na te linki:
Odpowiedź Stackoverflow ;
Tutorial .

0

ogólnie działa tylko pierwszy sposób z tych trzech, ale nie do końca, ponieważ program jest stworzony na podstawie SWT i używa się tam CCombo, jest napisany w niższej Javie niż 8

  1. put data to the String[] Array
`String[] items = {"test1", "test2", "test3"};
 JComboBox combo = new JComboBox(items);`
  1. put data to the Vector 1D Vector
Vector<String> v1 = new Vector<String>();
 v1.add("item1");
 v1.add("item2");
 v1.add("item3");
 JComboBox combo = new JComboBox(v1);
  1. put data to the ComboBoxModel
DefaultComboBoxModel model = new DefaultComboBoxModel();
 model.add("item1");
 model.add("item2");
 model.add("item3");
 JComboBox combo = new JComboBox();
 combo.setModel(model);

jeśli zrobie to jak w sposobie 1, to mam bład że brak konstruktora:
"The constructor CCombo(String[]) is undefined"
tylko jak taki konstruktor napisac w CCombo.class ?

może wyjaśnie co chcę zrobić, chcę aby w CCombo wyswietlała sie lista zależnie od wyboru radio buttona oraz najlepiej by było aby te listy były w bazie SQL, żeby można było je edytować.
Ma ktoś jakieś pomysły jak to rozwiązać? Dopiero zaczynam z Java:)

0

albo jeszcze miałem inne rozwiazanie tego, w Swingu stworzyłem 5 comboboxów i ustawiłem je na tej samej pozycji, wszystkie dałem setVisible(false), a potem za pomocą radio buttona wyświetłałem ten który chciałem. Tylko że w SWT nie mam pojęcia jak zrobić przy GridLayout żeby w tym samym miejscu utworzyło mi 5 combo, żeby nie przestawiać innych elementów w widoku

0

mam jeszcze inny pomysł rozwiązania tego, mianowicie combo pobierało by dane z pliku xml lub txt. Czy takie rozwiazanie było by możliwe przy CCombo z SWT?

0

jak z poniższej metody

public class X {	
		public void main(String[] args) {
			File f = new File("C:/SalesPartner/myfile.txt");
	        try{
	            ArrayList<String> lines = get_arraylist_from_file(f);
	            for(int x = 0; x < lines.size(); x++){
	                System.out.println(lines.get(x));
	            }
	        }
	        catch(Exception e){
	            e.printStackTrace();
	        }
	    //    System.out.println("done");

	    }
	    public ArrayList<String> get_arraylist_from_file(File f) 
	        throws FileNotFoundException {
	        Scanner s;
	        ArrayList<String> list = new ArrayList<String>();
	        s = new Scanner(f);
	        while (s.hasNextLine()) {
	            list.add(s.nextLine());
	        }
	        
	        s.close();
	        return list;
	    
		}
	}

mogę wyciągnąć dane żeby w innej metodzie mogłem użyć kodu:

ccombo.setItems(items);

czy pomoże mi ktoś znaleźć rozwiązanie?

jesli mam utworzone tak:

String[]arr1 = {"test1", "test2"};

to polecenie setItems(arr1) działa dobrze i wyświetla mi w CCombo

problem polega na tym że musze miec stringa arr1 edytowalnego, nie moge na stałe przypisać jak powyżej

lub z tej metody jak moge pobrać "arr7" ?

public class Program {

		public  void main(String[] args) throws IOException {
			ArrayList<String> arr7 = new ArrayList<String>();
			BufferedReader reader = new BufferedReader(new FileReader(
					"C:/SalesPartner/myfile.txt"));

	        while (true) {
	            String line = reader.readLine();
	            if (line == null) {
	                break;
	            }
	         //   System.out.println(line);
	          arr7.add(line);
	        }

	        reader.close();
		}
		
	}
0

Mam taki program w Swingu:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

import javax.swing.DefaultComboBoxModel;

public class JComboArray extends javax.swing.JFrame {

    //CONSTRUCTOR
    public JComboArray() {
        initComponents();
    }
    String[]arr1;
    public class Program {
    	
    		public void main(String[] args) throws IOException {
    			ArrayList<String> arr7 = new ArrayList<String>();
    			BufferedReader reader = new BufferedReader(new FileReader(
    					"C:/SalesPartner/myfile.txt"));

    	        // Loop over lines in the file and print them.
    	        while (true) {
    	            String line = reader.readLine();
    	            if (line == null) {
    	                break;
    	            }
    	            arr7.add(line);
    	            System.out.println(line);
    	            
    	        }

    	        // Close the BufferedReader.
    	        reader.close();
    	     //   System.out.println(arr7);
    	        arr1 = arr7.toArray(new String[arr7.size()]);
    	      //  System.out.println(arr1);
    	     //   for(String value:arr1) {
    	     //   	System.out.println(value);
    	     //   }
    		}

    	}
    
    //BIND DATA
   private void populate()
   {
     //  String[] spacecrafts={"Casini","Juno","Apollo 15","Kepler","New Horizon","Galileo","Enterprise","James Web","Voyager","Spitzer"};
       DefaultComboBoxModel dm=new DefaultComboBoxModel(arr1);
       jComboBox1.setModel(dm);
   }

    @SuppressWarnings("unchecked")
    //THIS GENERATED BY NETBEANS
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jComboBox1 = new javax.swing.JComboBox();
        populateBtn = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        populateBtn.setText("Populate");
        populateBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                populateBtnActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(181, 181, 181)
                        .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 206, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(236, 236, 236)
                        .addComponent(populateBtn)))
                .addContainerGap(195, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(86, 86, 86)
                .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(56, 56, 56)
                .addComponent(populateBtn)
                .addContainerGap(154, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    //POPULATE BTN CLICKED
    private void populateBtnActionPerformed(java.awt.event.ActionEvent evt) {                                            
        populate();

    }                                           

    //MAIN METHODS
    public static void main(String args[]) {

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new JComboArray().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JButton populateBtn;
    // End of variables declaration                   
}

Domyślnie po naciśnięciu na przycisk Populate zmienia on zawartość ComboBox'a. Tylko że w moim przypadku z ArrayList to nie działa i wyrzuca w Consoli takie błędy:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.DefaultComboBoxModel.<init>(Unknown Source)
at JComboArray.populate(JComboArray.java:49)
at JComboArray.populateBtnActionPerformed(JComboArray.java:101)
at JComboArray.access$0(JComboArray.java:100)
at JComboArray$1.actionPerformed(JComboArray.java:68)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

proszę o pomoc jak to naprawić żeby ładowało te dane z ArrayList do tego Combobox'a. Utknąłem na tym i nie wiem co zrobić.

0

Dzień dobry, prosze o pomoc w rozwiązaniu problemu. W poniższym programie String[] arr ma wartość null, czyżby clasa Buff w ogóle nie była wykonywana? Jak mogę to rozwiązać? Wiem że to banalne pytania, ale nie mam doświadczenia w Javie. Kod programu:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class Program2 {
	
	BufferedReader br;
static	String[] arr;
	String line;
	ArrayList<String> list;
//	private static final String[] ITEMS = { "A", "B", "C", "D" };
	public void Buff()throws FileNotFoundException, IOException{
	  br = new BufferedReader(new FileReader("C:/SalesPartner/myfile.txt")); //$NON-NLS-1$
		 
		list = new ArrayList<String>(); {
			while((line = br.readLine()) != null) {
			     list.add(line);
			}
			br.close();
			
		arr = list.toArray(new String[list.size()]); 
		}
		
	}
	  public static void main(String[] args) {

	    Display display = new Display();
	    Shell shell = new Shell(display);
	    shell.setLayout(new FillLayout());



	    // Create a "simple" Combo
	    Combo simple = new Combo(shell, SWT.DROP_DOWN);
	  //  simple.setItems(ITEMS);
	    simple.setItems(arr);


	    
	    shell.open();
	    while (!shell.isDisposed()) {
	      if (!display.readAndDispatch()) {
	        display.sleep();
	      }
	    }
	    display.dispose();
}
}

Taki bład w consoli:

Exception in thread "main" java.lang.IllegalArgumentException: Argument cannot be null
at org.eclipse.swt.SWT.error(SWT.java:4514)
at org.eclipse.swt.SWT.error(SWT.java:4448)
at org.eclipse.swt.SWT.error(SWT.java:4419)
at org.eclipse.swt.widgets.Widget.error(Widget.java:482)
at org.eclipse.swt.widgets.Combo.setItems(Combo.java:2128)
at Program2.main(Program2.java:44)

po trudnych bojach w końcu rozwiązanie działa:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;


public class Program {
 static String[] arr1;
 
	public static void main(String[] args) throws IOException {
		ArrayList<String> arr7 = new ArrayList<String>();
		BufferedReader reader = new BufferedReader(new FileReader(
				"C:/SalesPartner/myfile.txt"));

        // Loop over lines in the file and print them.
        while (true) {
            String line = reader.readLine();
            if (line == null) {
                break;
            }
            arr7.add(line);
         //   System.out.println(line);
            
        }

     // Close the BufferedReader.
        reader.close();
     //   System.out.println(arr7);
        arr1 = arr7.toArray(new String[arr7.size()]);
     //   System.out.println(arr1);
     //   for(String value:arr1) {
     //   	System.out.println(value);	
     //   }
        createCom();
	}

	private static void createCom() {
		Display display = new Display();
	    Shell shell = new Shell(display);
	    shell.setLayout(new FillLayout());

	    // Create a "simple" Combo
	    Combo simple = new Combo(shell, SWT.DROP_DOWN);
	    simple.setItems(arr1);
	     
	    shell.open();
	    while (!shell.isDisposed()) {
	      if (!display.readAndDispatch()) {
	        display.sleep();
	      }
	    }
	    display.dispose();
	  }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1