2017-11-21 8 views
0

私は現在、Java GUIのデータ視覚化プロジェクトに取り組んでいます。プログラムはデータファイル(20-300M)をロードし、ファイル内の信号に従ってカーブをペイントします。非常に多くの信号が存在し、異なるデータファイルに存在し、これらの信号の出現もまた異なる。Java GUIの動的な追加とソートのチェックボックス

私は2つのデータファイル、file1、file2という名前を持っています。 file1には、私がペイントしたい3つのシグナル(A、B、C)、ファイル2には2つのシグナル(A、B)しかありません。

file1では、信号Aは10回、Bは5回、Cは4回発生します。ファイル2では、信号Bが20回発生し、信号Aが10回発生します。私がしたいのは、シグナルに従って動的に(どのペイントパネルに表示するかを選択するために使用される)チェックボックスを生成し、その発生に応じてこれらのチェックボックスをソートすることです。

つまり、file1をロードすると、Aのチェックボックスがオンになり、最後にCのチェックボックスがオンになります。file2をロードすると、Bのチェックボックスがオンになっている必要があります。 A.

これは可能ですか? 私の説明が意味をなされることを願っています。あまりにも事前にありがとう!ここで

+1

のダイナミックなレイアウトのための一例であり、あなたは何を試してみましたか?ファイルを選択/ロードするたびに、それに応じてチェックボックスが更新されるはずです – phflack

+1

確かに実行できます。短いランナブルの例([SSCCE](http://sscce.org))を作成して、どこに問題があるのか​​理解できるようにしてください。 –

+0

迅速な返信をしてくれてありがとうございました。私はこれまでに試してみたことの短い例を取り上げます。 –

答えて

1

は、コンポーネント

import java.awt.BorderLayout; 
import java.awt.CardLayout; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JCheckBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingConstants; 
import javax.swing.SwingUtilities; 
import javax.swing.WindowConstants; 

public class DynamicLayoutExample implements Runnable { 

    private static final String[] NAMES_1 = {"One", "Two", "Three", "Four", "Five"}; 

    private static final String[] NAMES_2 = {"Two", "One", "Five", "Three"}; 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new DynamicLayoutExample()); 
    } 

    @Override 
    public void run() { 
     JFrame frm = new JFrame("Dynamic layout"); 
     final CardLayout card = new CardLayout(); 
     final JPanel layoutPanel = new JPanel(card); 
     layoutPanel.add(createPanel(NAMES_1), "1"); 
     layoutPanel.add(createPanel(NAMES_2), "2"); 
     frm.add(layoutPanel); 
     ActionListener l = new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       card.show(layoutPanel, e.getActionCommand()); 
      } 
     }; 
     JButton btn = new JButton("Show NAMES_1"); 
     btn.setActionCommand("1"); 
     btn.addActionListener(l); 
     JPanel buttonsPanel = new JPanel(); 
     buttonsPanel.add(btn); 
     btn = new JButton("Show NAMES_2"); 
     btn.setActionCommand("2"); 
     btn.addActionListener(l); 
     buttonsPanel.add(btn); 
     frm.add(buttonsPanel, BorderLayout.NORTH); 
     frm.pack(); 
     frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     frm.setLocationRelativeTo(null); 
     frm.setVisible(true); 
    } 

    private JPanel createPanel(String[] array) { 
     JPanel result = new JPanel(new GridLayout(array.length, 1)); 
     for (String s : array) { 
      JCheckBox check = new JCheckBox(s); 
      check.setHorizontalAlignment(SwingConstants.LEADING); 
      result.add(check); 
     } 
     return result; 
    } 
} 
関連する問題