2016-06-22 14 views
0

スイングアプリケーションでmiglayoutを使用しました。jtable cantがフレーム全体に表示されるような問題が1つ発生しました。 は、私はあなたがMigLayoutを使用しているか、問題があるjtableを持つmiglayout

マイimplemantaionコードは、下記の

package test; 



import java.awt.EventQueue; 
import java.util.Arrays; 

import javax.swing.DefaultListModel; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JList; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.SwingConstants; 
import javax.swing.table.DefaultTableModel; 


import net.miginfocom.swing.MigLayout; 



public class ProductPanel2 extends JPanel { 

private JLabel lblProd; 
private JButton butAdd; 
private JButton butRemove; 
private JButton butEdit; 
private JScrollPane scroll; 
private JTable table; 
private static final long serialVersionUID = 1L; 
public JList<String> lst_Options; 
private JScrollPane scr_Data; 
private JComboBox<ComboItem> cmb_Suppliers; 


//Generar de inmediato 
private JButton btn_NewUpdate; 
private JButton btn_Delete; 
private JButton btn_Copy; 
private JTable tbl_Settings; 
private JLabel lbl_SelectedOption; 
DefaultListModel<String> modeloOpciones; 
public ProductPanel2() { 

    initComponents(); 
} 

private void initComponents() { 



    lblProd = new JLabel("Product List: "); 

    btn_NewUpdate = new JButton("Add"); 
    btn_Delete = new JButton("Remove"); 
    lbl_SelectedOption = new JLabel("Tipo de datos"); 
    JLabel lbl_Opciones = new JLabel("Opciones"); 

    lst_Options = new JList<String>(); 
    modeloOpciones = new DefaultListModel<String>(); 
    btn_Delete = new JButton("Eliminar"); 

    btn_NewUpdate = new JButton("Nuevo"); 
    scr_Data = new JScrollPane(); 
    cmb_Suppliers = new JComboBox<ComboItem>(); 
    modeloOpciones.addElement("Proveedores"); 
    modeloOpciones.addElement("Productos"); 
    modeloOpciones.addElement("Partidas"); 
    lst_Options.setModel(modeloOpciones); 

    tbl_Settings = createTable(); 
    tbl_Settings.setFillsViewportHeight(true); 
    scr_Data = new JScrollPane(tbl_Settings);   

    JPanel filterPanel=new JPanel(); 


    setLayout(new MigLayout("debug", "[96px][][94.00][grow][149.00px][2px][161px]", "[16px][240px,grow][12px][29px]")); 

    //add(lbl_SelectedOption, "cell 1 0,alignx left,sgx"); 

    add(lst_Options, "cell 0 1 1 5,grow"); 


    filterPanel.add(scr_Data,"wrap, sg buttons"); 
// filterPanel.add(cmb_Suppliers, ""); 
    add(filterPanel,"span 2 3, grow, wrap"); 
    scr_Data.setViewportView(tbl_Settings); 
    lbl_Opciones.setHorizontalAlignment(SwingConstants.CENTER); 
    add(lbl_Opciones, "cell 0 0,growx,aligny top"); 

    add(btn_Delete, "cell 6 3,alignx right,aligny bottom"); 
    add(btn_NewUpdate, "cell 4 3,alignx right,aligny bottom"); 

    refreshCombo(cmb_Suppliers); 
} 
private void refreshCombo(JComboBox<ComboItem> combo) { 
    combo.removeAllItems(); 
    try { 

      combo.addItem(new ComboItem("0","ashjish")); 
      combo.addItem(new ComboItem("2","ashjish")); 
      combo.addItem(new ComboItem("3","ashjish")); 

    } catch (Exception e) { 
     //log.logToFile("refreshCombo: " + e.getClass().getName() + ": " + e.getMessage(), 1); 
     e.printStackTrace(); 
    }  
} 
private JTable createTable() { 

    String[] columnNames = "Name 1,Name 2,Name 3,Name 4,Name 5".split(","); 

    int rows = 30; 
    int cols = columnNames.length; 
    String[][] data = new String[rows][cols]; 

    for(int i=0; i<rows; i++) { 
     for(int j=0; j<cols; j++) { 
      data[i][j] = "R"+i+" C"+j; 
     } 
    } 
    JTable table = new JTable(data, columnNames); 

    return table; 
} 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      JFrame frame = new JFrame(); 
      ProductPanel2 pane = new ProductPanel2(); 
      frame.setContentPane(pane); 
      frame.setSize(1000,1000); 
      frame.setLocationRelativeTo(null); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.setVisible(true); 
     } 
    });   

} 
} 

enter image description here

+3

1で言及でenter image description here huichワットスペースbetweebコンボとJTableのを望んではいけない)私はポイントが表示されません問題が明らかにコードであるときにスクリーンショットを投稿する。もっと早く助けを求めるには、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 2)すべての小文字で書かれた言葉は、混乱している人の話を聞くような、読みにくい。文頭に大文字、Iという単語、 'ArrayList'やOracleなどの適切な名前を使用してください。 –

+3

また、3)あなたは要件や仕様を記述しましたが、質問はしませんでした。あなたの質問は何ですか? –

答えて

0

あなたは再考えるべきであるJFrameのエッジの右側端にそれまでは表示したいです!クイックスタートガイドを読むことを検討してください:http://www.miglayout.com/QuickStart.pdf

また、変数の命名にはいくつかの作業が必要ですが、どの変数が何のためであるかは不明です。あなたの問題を解決するために

、次の操作を行います。

tbl_Settings = createTable(); 
    tbl_Settings.setFillsViewportHeight(true); 
    scr_Data = new JScrollPane(tbl_Settings); 
    // I have created a new Dimension-object. Those dimensions are FIXED! You might want to put a new dimension in, that is relative to the window size. 
    scr_Data.setPreferredSize(new Dimension(800, 800)); 

    JPanel filterPanel=new JPanel(); 

変更するには、この行(あなたは、行と列のための絶対的な幅と高さを設定しているところ!):これに

setLayout(new MigLayout("debug", "[96px][][94.00][grow][149.00px][2px][161px]", "[16px][240px,grow][12px][29px]")); 

setLayout(new MigLayout()); 

追加したすべてのセルを削除します。これは、他のレイアウト部分と混在しているためです。していない細胞RE:

add(lst_Options, "grow"); 
filterPanel.add(scr_Data,"wrap"); 
// filterPanel.add(cmb_Suppliers, ""); 
add(filterPanel,"width 100%, growx, push, span, wrap"); 
scr_Data.setViewportView(tbl_Settings); 
lbl_Opciones.setHorizontalAlignment(SwingConstants.CENTER); 
add(lbl_Opciones, "growx,aligny top"); 
add(btn_Delete, "alignx right,aligny bottom"); 
add(btn_NewUpdate, "alignx right,aligny bottom"); 

は次のようになります。

Table


PS:私は、これがうまくいくことを知りませんでした:

String[] columnNames = "Name 1,Name 2,Name 3,Name 4,Name 5".split(","); 

通常の方法は次のとおりです。

String[] columnNames = {"Name 1","Name 2","Name 3","Name 4","Name 5"}; 

私は何かを学んだ!

EDIT:

私はあなたが注意する必要がありますので、正規表現を使用してsplit()作品は、どのようにそれを使用すること、学びました!

これは、空のフィールドとNOT "AAA" と "BBB" を返します:

"aaa.bbb".split("."); 

アップデート:私は私の答えを更新した

、これは内のコードがありますinitComponents()-方法。私は再びを促しますあなたはMigLayoutについてもっと読むことをお勧めします。このような細胞成分の混合を停止するには、add(lst_Options, "cell 0 1,grow");に細胞以外の成分を加えてください。これは乱雑で理解しにくい/修正することです。私は私の答えでそれらの細胞を削除し、ボタンのアラインメントを追加しました。今はすべてが期待通りに機能します。

private void initComponents() { 

    lblProd = new JLabel("Product List: "); 

    btn_NewUpdate = new JButton("Add"); 
    btn_Delete = new JButton("Remove"); 
    lbl_SelectedOption = new JLabel("Tipo de datos"); 
    JLabel lbl_Opciones = new JLabel("Opciones"); 

    lst_Options = new JList<String>(); 
    modeloOpciones = new DefaultListModel<String>(); 
    btn_Delete = new JButton("Eliminar"); 

    btn_NewUpdate = new JButton("Nuevo"); 
    scr_Data = new JScrollPane(); 
    cmb_Suppliers = new JComboBox<String>(); 
    modeloOpciones.addElement("Proveedores"); 
    modeloOpciones.addElement("Productos"); 
    modeloOpciones.addElement("Partidas"); 
    lst_Options.setModel(modeloOpciones); 

    tbl_Settings = createTable(); 
    tbl_Settings.setFillsViewportHeight(true); 
    scr_Data = new JScrollPane(tbl_Settings); 
    tbl_Settings.setPreferredScrollableViewportSize(tbl_Settings.getPreferredSize()); 
    setLayout(new MigLayout("","[right]")); 
    add(lbl_Opciones, "growx,aligny, top, wrap"); 
    add(lst_Options, "grow"); 

    add(scr_Data, "width 100%, growx, push, span, wrap"); 
    scr_Data.setViewportView(tbl_Settings); 
    lbl_Opciones.setHorizontalAlignment(SwingConstants.CENTER); 

    btn_Delete.setHorizontalAlignment(SwingConstants.RIGHT); 
    btn_NewUpdate.setHorizontalAlignment(SwingConstants.RIGHT); 
    add(btn_Delete, "bottom, span 2"); 
    add(btn_NewUpdate, "bottom"); 

    refreshCombo(cmb_Suppliers); 
} 

次のようになります。

Updated table

0

私はスクリーンショット

package test; 
import java.awt.EventQueue; 
import java.util.Arrays; 

import javax.swing.DefaultListModel; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JList; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.SwingConstants; 
import javax.swing.table.DefaultTableModel; 


import net.miginfocom.swing.MigLayout; 




public class ProductPanel2 extends JPanel { 

private JLabel lblProd; 
private JButton butAdd; 
private JButton butRemove; 
private JButton butEdit; 
private JScrollPane scroll; 
private JTable table; 
private static final long serialVersionUID = 1L; 
public JList<String> lst_Options; 
private JScrollPane scr_Data; 
private JComboBox<ComboItem> cmb_Suppliers; 


//Generar de inmediato 
private JButton btn_NewUpdate; 
private JButton btn_Delete; 
private JButton btn_Copy; 
private JTable tbl_Settings; 
private JLabel lbl_SelectedOption; 
private JPanel filterPanel; 
private JLabel lbl_cmb_supplier; 
private JButton btn_search; 

public ProductPanel2() { 

    initComponents(); 
} 
private void initComponents() { 

    lblProd = new JLabel("Product List: "); 
    lbl_cmb_supplier = new JLabel("Proveedor"); 
    btn_NewUpdate = new JButton("Add"); 
    btn_Delete = new JButton("Remove"); 
    lbl_SelectedOption = new JLabel("Tipo de datos"); 
    JLabel lbl_Opciones = new JLabel("Opciones"); 
    cmb_Suppliers = new JComboBox<ComboItem>();  

    btn_Delete = new JButton("Eliminar"); 
    btn_search = new JButton("Search"); 
    btn_NewUpdate = new JButton("Nuevo"); 
    scr_Data = new JScrollPane(); 
    JComboBox<String> cmb_Suppliers = new JComboBox<String>(); 
    JButton btn_New = new JButton("Nuevo"); 
    JButton btn_Delete = new JButton("Cancelar"); 
    JButton btn_PDF = new JButton("Crea PDF"); 
    JButton btn_Send = new JButton("Envia por correo"); 
    tbl_Settings = createTable(); 
    tbl_Settings.setFillsViewportHeight(true); 
    scr_Data = new JScrollPane(tbl_Settings); 
    tbl_Settings.setPreferredScrollableViewportSize(tbl_Settings.getPreferredSize()); 
    filterPanel = new JPanel(); 
    /*setLayout(new MigLayout("","[right]")); 
    add(lbl_Opciones, "growx,aligny, top, wrap"); 
    filterPanel.add(lbl_cmb_supplier, "split 2, wrap"); 
    filterPanel.add(cmb_Suppliers, "wrap");  
    filterPanel.add(btn_search, "grow, spany, wrap"); 
    add(filterPanel, "growx 5,split 2, flowy, top, sgx"); 
    add(scr_Data, "width 100%, growx, push, span, wrap"); 
    scr_Data.setViewportView(tbl_Settings); 
    lbl_Opciones.setHorizontalAlignment(SwingConstants.CENTER);*/ 


    setLayout(new MigLayout("debug", "[122px][129px][23px][45px][148px,grow]", "[][100px,grow][]")); 
     add(lbl_Opciones, "growx, wrap"); 
     filterPanel.add(lbl_cmb_supplier); 
     filterPanel.add(cmb_Suppliers);  
     filterPanel.add(btn_search, "grow, spany, wrap"); 
     add(filterPanel, "wrap"); 
     add(scr_Data, "width 100%, growx, push, span, wrap"); 


     add(btn_New); 
     add(btn_PDF); 
     add(btn_Send); 
     add(btn_Delete);  

    refreshCombo(cmb_Suppliers); 
} 
private void refreshCombo(JComboBox<String> combo) { 
    combo.removeAllItems(); 
    try { 



    } catch (Exception e) { 
     //log.logToFile("refreshCombo: " + e.getClass().getName() + ": " + e.getMessage(), 1); 
     e.printStackTrace(); 
    }  
} 
private JTable createTable() { 

    String[] columnNames = "Name 1,Name 2,Name 3,Name 4,Name 5".split(","); 

    int rows = 30; 
    int cols = columnNames.length; 
    String[][] data = new String[rows][cols]; 

    for(int i=0; i<rows; i++) { 
     for(int j=0; j<cols; j++) { 
      data[i][j] = "R"+i+" C"+j; 
     } 
    } 
    JTable table = new JTable(data, columnNames); 

    return table; 
} 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      JFrame frame = new JFrame(); 
      ProductPanel2 pane = new ProductPanel2(); 
      frame.setContentPane(pane); 
      frame.setSize(1000,1000); 
      frame.setLocationRelativeTo(null); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.setVisible(true); 
     } 
    });   

} 
} 
+0

自分の答えを更新しました。あなたの指定どおりに動作します。アップデートをご覧ください。それでも、細胞成分と非細胞成分を混ぜ合わせるべきではありません! – hamena314

+0

私はmaglayoutのbeginginerです。それはpursposeセル、 – ASHISH

+0

ここでは、 "絶対的なセル座標の使用"の章を参照してください:http://www.miglayout.com/QuickStart.pdf。 'cell'コマンドを使用すると、(Microsoft Excelのような)絶対配置された表のセルを作成し、コンポーネントの「フロー」を使用することはできません。しかし、ほとんどの場合、セルの構造が非常に複雑になる可能性があるため、フロー方式の方が優れています。小さな部品がある場合は、セルを使用できますが、通常は使用しないでください。私の答えがあなたの質問に答えるなら、それを受け入れてください。そうでなければ、MigLayoutの特定の部分に関する新しい質問を開くべきです。 – hamena314