2016-04-05 31 views
0

içindeki bir ArrayList öğesindeki bir değişkenden, bir statik ArrayList ve bir tane oluşturulmuş bir UI ile bir değişken gösteriliyorsa, bu, yiyecek öğeleri olacak çünkü foodName nesnelerinin her birinin listesini göstermek istiyorum Bu bir çevrimiçi menü GUI'de seçilebilir ve sipariş edilebilir.Bir JScrollPane

Yukarıdaki, her MenuItem için sınıfımdır.

import java.util.ArrayList; 


/** 
* 
* ArrayList for the class, will hold all food items 
* @author Jonathan 
* @version 1.0 
* 
*/ 

public class RestaurantArrayList extends MenuItem 
{ 


    public RestaurantArrayList(String nameFood, String typeFood, float foodPrice, int caloryCount) { 
     super(nameFood, typeFood, foodPrice, caloryCount); 

    } 

    public static final ArrayList<MenuItem> items; 

    static 
    { 
     items = new ArrayList<>(); 
     items.add(new MenuItem("Coca Cola", "Drink", 3.00f, 38)); 
     items.add(new MenuItem("Fanta Orange", "Drink", 3.00f, 31)); 
     items.add(new MenuItem("Glass of Red Wine", "Drink", 5.00f, 85)); 
     items.add(new MenuItem("Glass of White Wine", "Drink", 5.00f, 82)); 
     items.add(new MenuItem("Carling", "Drink", 3.50f, 189)); 
     items.add(new MenuItem("Fosters", "Drink", 3.50f, 378)); 
     items.add(new MenuItem("Water", "Drink", 0.00f, 0)); 
     items.add(new MenuItem("Breads", "Starter", 5.00f, 150)); 
     items.add(new MenuItem("Cold Meat", "Starter", 5.00f, 150)); 
     items.add(new MenuItem("Potato Skins and Barbeque Sauce", "Starter", 5.00f, 500)); 
     items.add(new MenuItem("Cold Meat", "Starter", 5.00f, 400)); 
     items.add(new MenuItem("Garlic Bread and Cheese", "Starter", 4.50f, 450)); 
     items.add(new MenuItem("Steak", "Main", 13.50f, 750)); 
     items.add(new MenuItem("Cheese and Bacon Burger", "Main", 8.00f, 850)); 
     items.add(new MenuItem("Spaghetti Cabonara", "Main", 7.00f, 675)); 
     items.add(new MenuItem("Steak", "Main", 13.50f, 378)); 
     items.add(new MenuItem("Seafood Paella", "Main", 10.00f, 850)); 
    } 
} 

Kurduğum ArrayList Sınıfı İşte. Metin alanında sadece yemek ismini göstermek istiyorum ama bunu nasıl yapacağımı bilmiyorum. Eğer herkes yardım ederse harika olur. Teşekkür

JScrollPane scrollPane_1 = new JScrollPane(); 
     scrollPane_1.setBounds(219, 50, 134, 309); 
     contentPane.add(scrollPane_1); 

bu ben kendi GUI sınıfında içindedir içeride görüntülenecek bilgileri, isteyen ettiğimi de bir JScrollPane kurma küçük bir kod snippet'tir.

+0

seni diliyorum:

JList foodList = new JList(RestaurantArrayList.items.toArray()); foodList.setCellRenderer(new FoodListRenderer()); JScrollPane scr = new JScrollPane(foodList); 

ve özel ListCellRenderer sınıfı forumlarda yayınlamadan önce sınıf. Bakınız: http: //stackoverflow.com/questions/36385911/i-have-a-class-which-holds-attributes-for-a-menu-item-i-need-to-populate-three – camickr

+0

@camickr: gerçekten ! 1+ –

cevap

2

Özel DefaultListCellRenderer ile JList kullanırım. Hücre oluşturucuları, bir hücredeki nesnelerin nasıl gösterildiğini belirler, böylece sizin durumunuzda, JList öğenizde MenuItem nesnelerini ve oluşturucunun gösterilmesi için ad dizesini ayıklamanız gerekir. İşte kaleme budur:

bir JList oluşturma ve JScrollPane viewport'unun ekleyin: adamlar birbirlerine konuşmak istiyorum

class FoodListRenderer extends DefaultListCellRenderer { 

@Override 
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
    String name = ((MenuItem) value).foodName(); 
    return super.getListCellRendererComponent(list, name, index, isSelected, cellHasFocus); 
}} 
+0

Güzel örnek kod. 1+ –

2

Öğelerin listesini görüntülemenin en basit yolu, bir JTextArea kullanmak değil, yalnızca tek bir bilgi sütunu (menü öğesi adı gibi) veya JTable'ı görüntülemek istiyorsanız JList kullanmaktır. Birden çok sütun içeren bir veri tablosu görüntüler.

basit, yol

Adımlar, JList:

  • Menuıtem Diyelim ki yukarıdaki ArrayList doldurmak gibi, onun addItem(...) yöntemi kullanılarak doldur bir DefaultListModel<MenuItem> nesne oluşturun.
  • Yerine bir JList<MenuItem>
  • JList'i bir JScrollPane'e yerleştirin.
  • JList'in görünen satır sayısını setVisibleRowCount(...) numaralı telefondan arayarak ayarlayın.
  • JList menuitem sizin JList MenuItem adını görüntüleyen bir renderer vererek MenuItem adını veya
  • döndüren bir public String toString() yöntemi vererek ya
    • tarafından doğru öğeyi görüntüler emin olun.

JList hakkında daha fazlası için - Swing JList Tutorial göz atın.

Ekranınızın gücünü arttırmak isterseniz, bir JTable gitmek için gereken yoldur, ancak bu, kodun karmaşıklığındaki bir artış anlamına gelecektir, çünkü ya kendi TableModel'i oluşturmanız gerekecek. DefaultTableModel (daha basit fakat sınırlı) veya AbstractTableModel (daha fazla esneklik ve güçle). Bu rota ile ilgileniyorsanız, lütfen Swing JTable Tutorial'a bir göz atın. (Orijinal sorununa ilgisiz)


Yan önerileri:

  • Bu, scrollPane_1.setBounds(219, 50, 134, 309); sen null düzenleri kullanıyorsanız ve eğer öyleyse, bu alışkanlıktan değiştirmek isteyeceksiniz düşündürmektedir.Boş düzenler ve setBounds(), yeni başlayanlar için karmaşık GUI'leri oluşturmanın en kolay ve en iyi yolu gibi Swing'e benziyor gibi görünse de, Swing GUI'leri, bunları kullanırken karşılaşacağınız daha ciddi zorlukları yaratırsınız. GUI yeniden boyutlandırıldığında bileşenlerinizi yeniden boyutlandırmazlar, geliştirmek veya sürdürmek için bir kraliyet cadısıdırlar, kaydırma yuvalarına yerleştirildiğinde tamamen başarısız olurlar, orijinal platformdan farklı olan tüm platformlarda veya ekran çözünürlüklerinde görüntülendiklerinde çok kötü görünürler. .
  • Aşırı statik kullanımından kaçının. Yukarıdaki ArrayList'iniz gibi statik alanları kullandığınızda, bu alanı nesne yönelimli alandan ve statik alandan dışarı atarsınız. Dikkatli bir şekilde yapılırsa ve sadece kesinlikle gerekli olduğunda, bu tamamdır, ancak eğer mümkünse programın karmaşıklığını (kesin bir şekilde karmaşıklık karmaşıklığı) ve dolayısıyla da hata riskini arttırdığı için kaçınılmalıdır.
İlgili konular