2016-03-22 37 views
1

Üzerine değişken sayıda düğmeli (1-10000 düğme) bir java salıncak paneli oluşturmaya çalışıyorum. Bununla birlikte, formda gösterebileceğim düğmelerin sayısında bir sınırlama var gibi görünüyor ve düğmeler bir süre sonra tekrarlanıyor gibi görünüyor. Java Swing'de bulunan eğitimlere baktım. Ancak, başa çıkması beklenen düğmelerin sayısına uzanmıyor.Swing'de çok sayıda düğme görüntüleme

Bu, şu ana kadar yazdığım kod.

public JPanel createBlockGroup() { 
    JPanel blockPanel = new JPanel(); 
    Dimension buttonDimension = new Dimension(40,70); 
    GroupBlockJNI group = new GroupBlockJNI(); 
    System.out.println(group.getTotalBlockGroups()); 
    blockPanel.setMaximumSize(new Dimension(group.getTotalBlockGroups()*50, 100)); 
    blockPanel.setSize(group.getTotalBlockGroups()*50, 100); 

    for(int i=0; i<group.getTotalBlockGroups(); i++) { // getTotalBlockGroups() returns 6400 
     final int j=i; 
     JButton partition = new JButton("Block Group"); 
     partition.setPreferredSize(buttonDimension); 
     partition.addMouseListener(new MouseAdapter() { 
      @Override 
      public void mouseClicked(MouseEvent e) { 
       if(e.getClickCount() == 2) { 
        updateLevel(gCurrentLevel+1); 
        gButtonZoomOut.setEnabled(true); 
       } else if(e.getClickCount() == 1) { 
        updateText("Block Group "+String.valueOf(j)); 
       } 
      } 
     }); 
     blockPanel.add(partition); 
    } 

    return blockPanel; 
} 

Bu kodu çalıştırırken, yalnızca 574 düğmeyi görüntüleyebiliyorum. This is the snapshot.

Herhangi bir yardım için teşekkür ederiz.

+1

Daha iyi yardım için, daha önce bir [MCVE] veya [Kısa, Kendini İçeren, Doğru Örnek] (http://www.sscce.org/) gönderin. –

+2

Ağır ve hafif bileşenleri karıştırıyor gibi görünüyor, ki bu hiç de iyi bir fikir değil. Ayrıca, bileşenlerin tercih edilen/min/max boyutu ile uğraşmayın, düzen yöneticileri işlerini yapsınlar – MadProgrammer

+1

@Vikram Gaur Kendi kodlarımla test ettim. 100.000 tuşa basabiliyor. Dahası, bunları çalışma zamanında ekledim. Her şey sorunsuz görünüyor. Belki de uygulamanızı kontrol etmek istersiniz .. – user3437460

cevap

4

Üzerine değişken sayıda düğmeli (1-10000 düğme) bir java salıncak paneli oluşturmaya çalışıyorum. Ancak, formda gösterebileceğim düğmelerin sayısında bir sınırlama var gibi görünüyor ve düğmeler bir süre sonra tekrarlanıyor gibi görünüyor.

Bu

Ben 10.000 düğmeleri işleyebilir olup olmadığını test etmek kodlanmış olan bir örnektir. Her şey benim tarafımda iyi çalışıyor. 1000.000 düğme için bile iyi çalışıyor.

enter image description here


kaydırma bölmesini tutan bir test paneli:

class TestRunner{ 
    public static void main(String[] args){ 
     SwingUtilities.invokeLater(new Runnable(){ 
      @Override 
      public void run(){ 
       JFrame frame = new JFrame("Scrollable Panel"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new MainPanel()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true);     
      } 
     });  
    } 
} 

I p vardır: kodları çalıştırmak için

class MainPanel extends JPanel{ 

    private JScrollPane scrollPane; 
    private JPanel scrollPanel; 
    private JButton btnAddPage; 
    private static int idx = 0; 

    public MainPanel(){ 
     setPreferredSize(new Dimension(400, 140)); 
     setLayout(new BorderLayout()); 
     initComponents(); 
    }  
    private void initComponents(){ 
     scrollPanel = new JPanel(); 
     scrollPanel.setSize(new Dimension(300, 300));  
     scrollPane = new JScrollPane(scrollPanel); //Let all scrollPanel has scroll bars 
     btnAddPage = new JButton("Add New Page"); 
     btnAddPage.addActionListener(new ActionListener(){ 
      @Override 
      public void actionPerformed(ActionEvent e){ 
       //for(int x=0; x<10000; x++) //uncomment to test with 10,000 buttons 
       addButton(new JButton("Page " + (idx++))); 
       scrollPanel.revalidate(); 
      } 
     });    
     add(scrollPane, BorderLayout.CENTER); 
     add(btnAddPage, BorderLayout.SOUTH);     
    } 

    public void addButton(JButton btn){ 
     scrollPanel.add(btn); 
    } 
} 

Test Aracı sınıfı Tam kodları aştım, bunun sizin için yararlı olacağını düşünüyorum.

+2

[Java Swing'de küme kullanımından (Tercih Edilen | Maksimum | Minimum) boyut yöntemlerinden kaçınmalı mıyım?] (Http://stackoverflow.com/questions/7229226/should-i-avoid-the-use-of-setpreferredmaximumminimumsize- java-swi yöntemleri) ve 'Scrollable' yerine – MadProgrammer

+1

'u kullanmayı öğrenmeye başlarsanız, doğal kaydırma için kaydırma artışını değiştirmeyi unutmuştunuz, fakat gecikmeli cevap için üzgünüm – mKorbel

+0

. Posta güncellemelerini almadım :(. Her halükarda, aynı kodu satırın kaldırılmasından sonra çalıştırmayı denedim. Sistemimde 10000 düğme eklenemiyor. Sorun benim sistemimde yatıyor gibi görünüyor. Linux 64 bit, Ubuntu 15.04 çalıştırıyorum. I-3 işlemci –

İlgili konular