2017-07-01 2 views
1

ボタンを追加したいと思います。その番号は不明です。彼らが追加している間、彼らの位置は動的に設定する必要があります。 Netbeans IDEのデザイナを使用しているので、フレームレイアウトはGroupLayoutです。 GroupLayoutでこれを行うにはどうすればよいですか?手伝ってくれてありがとう。Netbeans IDEのデザイナを使用して動的にJFrameフォームを設計する

ここにクラスがあります。

package addButton; 

import javax.swing.JButton; 

/** 
* 
* @author 12043 
*/ 
public class MyGui extends javax.swing.JFrame { 

/** 
* Creates new form MyGui 
*/ 
public MyGui() { 
    initComponents(); 
    addButtons(3); 
} 

private void addButtons(int numberOfButtons) { 
    for (int i = 0; i < numberOfButtons; i++) { 
     JButton newButton = new JButton("NewButton" + i); 
     newButton.setSize(newButton.getPreferredSize()); 
     newButton.setLocation(10, i*30); 
     newButton.setVisible(true); 
     add(newButton); 
    } 
} 
//netbeans code after here 

フレームは次のように探しています:GUI意志で

The frame is looking like:

ボタンは、Androidランチャーのように見えます。それらの位置は行と列でソートされます。しかし、ボタンの数は特定できないので、私はこれを自動的に行う必要があります。

+0

'btn.setSize(btn.getPreferredSize());'と 'btn.setVisible(TRUE);'レイアウトマネージャは、最初の世話をするように、無意味であり、ほとんどのコンポーネントはとにかく、デフォルトで表示され – MadProgrammer

+0

[コンテナ内のコンポーネントのレイアウト](http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html) – MadProgrammer

+0

@AndrewThompson [OK]を理解し、編集しました。役職。私は "設定"ペインでJListを作成します。もう一度見てください。 – user12043

答えて

1

アンドロイドランチャーで次のようになりますGUIのボタン..

それは次のようになります。..

enter image description here

しかし、もちろん、デスクトップコンピュータにはありません次の画面に「スワイプ」することを理解しているので、長いリストのビューとスクロールペインを変更するキーボードはキーボード&です。

上記のGUIを作成したソースコードを示します。最上部のパスとファイルタイプを変更する必要があるかもしれませんが、パス文字列に表示されている最上位ディレクトリの実行可能ファイルを検索します。

import java.awt.*; 
import javax.swing.*; 
import javax.swing.border.EmptyBorder; 
import java.io.*; 
import java.util.Vector; 
import javax.swing.filechooser.FileSystemView; 

public class ExecutableList { 

    private JComponent ui = null; 
    String exePathString = "C:\\Windows"; 
    String exeFileType = "exe"; 

    ExecutableList() { 
     initUI(); 
    } 

    public final void initUI() { 
     if (ui != null) { 
      return; 
     } 

     ui = new JPanel(new BorderLayout(4, 4)); 
     ui.setBorder(new EmptyBorder(4, 4, 4, 4)); 

     File[] fAll0 = new File(exePathString).listFiles(); 
     Vector<File> v = new Vector<>(); 
     for (File f0 : fAll0) { 
      if (f0.isDirectory()) { 
       FilenameFilter fNF = new FilenameFilter() { 

        @Override 
        public boolean accept(File dir, String name) { 
         return name.toLowerCase().endsWith("exe"); 
        } 
       }; 
       File[] fExe0 = f0.listFiles(fNF); 
       System.out.println("fExe0: "); 
       if (fExe0 != null 
         ) { 
         //&& fExe0.length<100) { 
        System.out.println("fExe0: " + fExe0.length); 
        for (File f1 : fExe0) { 
         v.add(f1); 
        } 
       } 
      } 
     } 
     System.out.println("v.size(): " + v.size()); 
     DefaultListModel dlm = new DefaultListModel(); 
     for (File f : v) { 
      dlm.addElement(f); 
     } 
     JList list = new JList(dlm); 
     list.setCellRenderer(new File2CellRenderer()); 
     list.setVisibleRowCount(v.size()/5); 
     list.setLayoutOrientation(JList.HORIZONTAL_WRAP); 
     list.setFixedCellHeight(20); 
     list.setFixedCellWidth(30); 
     ui.add(new JScrollPane(
       list, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER)); 
    } 

    public JComponent getUI() { 
     return ui; 
    } 

    public static void main(String[] args) { 
     Runnable r =() -> { 
      try { 
       UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
      } catch (Exception useDefault) { 
      } 
      ExecutableList o = new ExecutableList(); 

      JFrame f = new JFrame(o.getClass().getSimpleName()); 
      f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
      f.setLocationByPlatform(true); 

      f.setContentPane(o.getUI()); 
      f.pack(); 
      Dimension d = f.getSize(); 
      d = new Dimension(d.width, d.height/3); 
      f.setMinimumSize(d); 
      f.setSize(d); 

      f.setVisible(true); 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
} 

/** A cell renderer for a File. */ 
class File2CellRenderer implements ListCellRenderer { 

    private FileSystemView fileSystemView; 

    private JLabel label; 

    File2CellRenderer() { 
     label = new JLabel(); 
     label.setOpaque(true); 
     fileSystemView = FileSystemView.getFileSystemView(); 
    } 

    @Override 
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
     File file = (File)value; 
     label.setIcon(fileSystemView.getSystemIcon(file)); 
     //label.setText(fileSystemView.getSystemDisplayName(file)); 
     label.setToolTipText(file.getName()); 

     if (isSelected) { 
      label.setBackground(Color.RED); 
      label.setForeground(Color.YELLOW); 
     } else { 
      label.setBackground(Color.WHITE); 
      label.setForeground(Color.BLACK); 
     } 

     return label; 
    } 
} 
関連する問題