2015-04-27 73 views
0

我有一個JtextField和Jcombobox.Whenever從文本字段和組合框中選擇值,單擊添加按鈕時值應該出現在表中。第一行添加正確。當我嘗試添加第二行的第一行值被替換爲新的值,但第二行未被添加。 每次點擊添加按鈕時,應該將值添加到表中,而不刪除舊值並點擊刪除,我應該可以刪除該行..我可以實現這一點。 這裏是我的代碼添加JTable中的第二行時刪除的第一行

public static void main(String[] args) 
{ 
    // TODO Auto-generated method stub 
    EventQueue.invokeLater(new Runnable() { 

    @Override 
    public void run() { 
     // TODO Auto-generated method stub 
     try 
     { 
     ModelSelection modelselection=new ModelSelection(); 
     modelselection.setVisible(true); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
}); 

} 

public ModelSelection() throws TooManyListenersException 
{ 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setResizable(false); 
    setBounds(240, 30, 906, 658); 
    contentPane =new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    Image im=new ImageIcon(this.getClass().getResource("/sprinkle.jpg")).getImage(); 
    setContentPane(new JLabel(new ImageIcon(im))); 
    contentPane.setLayout(null);     

    modelSelection=new JLabel("MODULE SELECTION"); 
    modelSelection.setBounds(240, 20, 450,40); 
    modelSelection.setFont(new Font("arial",Font.BOLD,40)); 
    Color modellabel = new Color(16,180,205); 
    modelSelection.setForeground(modellabel); 
    add(modelSelection); 


    lab=new JLabel("Choose S-NET device and S-NET ID"); 
    lab.setBounds(30, 75, 500,40); 
    lab.setFont(new Font("arial",Font.BOLD,25)); 
    Color label = new Color(176,224,230); 
    lab.setForeground(label); 
    add(lab); 

    choice=new JLabel("S-Net Device -"); 
    choice.setBounds(30, 145, 200, 20); 
    choice.setFont(new Font("arial",Font.BOLD,25)); 
    Color choicecolor = new Color(135,206,250); 
    choice.setForeground(choicecolor);  
    add(choice); 

    String devicesnames[]={"SW-LE-4","SD-LD-4","SR-RL-8","SD-FL-4","SD-FN-2"}; 
    mod=new JComboBox(devicesnames); 
    mod.setBounds(260,140,230,35); 
    Color modcolor = new Color(173,216,230); 
    mod.setBackground(modcolor);  
    mod.setFont(new Font("arial",Font.BOLD,17)); 
    Color border=new Color(30,144,255); 
    mod.setBorder(new LineBorder(border, 2)); 
    mod.setSelectedIndex(-1); 
    add(mod); 

    snet=new JLabel("S-Net ID   -"); 
    snet.setBounds(30, 200, 200, 20); 
    snet.setFont(new Font("arial",Font.BOLD,25)); 
    Color snetcolor = new Color(135,206,250); 
    snet.setForeground(snetcolor);  
    add(snet); 

    id=new JTextField("1"); 
    id.setBounds(260,200,230,35); 
    id.setEditable(true); 
    Color idcolor = new Color(173,216,230); 
    id.setBackground(idcolor); 
    Color idborder=new Color(30,144,255); 
    id.setBorder(new LineBorder(idborder, 3)); 
    id.setFont(new Font("arial",Font.BOLD,20)); 
    add(id); 

    validityid=new JLabel("**S-Net ID(1-230) only"); 
    validityid.setBounds(500, 210, 200, 20); 
    validityid.setFont(new Font("arial",Font.PLAIN,18)); 
    Color validityidcolor = new Color(255,99,71); 
    validityid.setForeground(validityidcolor);  
    add(validityid);  


    add=new JButton("ADD"); 
    add.setBounds(180,260, 80, 35); 
    Color addbackground=new Color(0,0,255); 
    add.setBackground(addbackground);   
    Color border1=new Color(30,144,255); 
    add.setBorder(new LineBorder(border1,3)); 
    add.setFont(new Font("arial",Font.BOLD,18)); 
    add.setForeground(Color.WHITE); 
    add.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) 
     { 
      // TODO Auto-generated method stub 
      if(mod.getSelectedItem()!=null && id.getText()!=null) 
      { 
       System.out.println("correct"); 
       simpleset(); 
      } 
      else 
      { 
       JOptionPane optionPane = new JOptionPane("Fields cannot be empty", JOptionPane.ERROR_MESSAGE); 
       JDialog dialog = optionPane.createDialog("FAILURE"); 
       dialog.setAlwaysOnTop(true); 
       dialog.setVisible(true); 
      } 
     } 
    }); 
    add(add); 

    devices=new JLabel("Selected S-NET device and S-NET ID"); 
    devices.setBounds(30, 310, 450,40); 
    devices.setFont(new Font("arial",Font.BOLD,25)); 
    Color deviceslabel = new Color(176,224,230); 
    devices.setForeground(deviceslabel); 
    add(devices); 


    String columnNames[] = { "S-NET Device","S-NET ID"}; 
    String dataValues[][] = 
    { 
     { "12", "234", }, 
     { "-123", "43", }, 
     { "93", "89.2", }, 
     { "12", "234", }, 
     { "-123", "43", }, 


    }; 

    t=new JTable(); 
    JScrollPane s=new JScrollPane(t); 
    s.setBounds(30, 360, 400, 200); 
    Color sbcolor = new Color(128,200,242); 
    t.setBackground(sbcolor); 
    Color headercolor = new Color(152,252,252); 
    t.getTableHeader().setBackground(headercolor); 
    Color headerborder=new Color(0,0,255); 
    t.getTableHeader().setBorder(new LineBorder(headerborder,2)); 
    t.getTableHeader().setFont(new Font("arial", Font.BOLD, 18)); 
    t.setRowHeight(30); 
    t.setFillsViewportHeight(true); 
    t.setShowVerticalLines(true); 
    t.setShowGrid(true); 
    Color gridcolor=new Color(0,0,0); 
    t.setGridColor(gridcolor); 
    t.setFont(new Font("arial", Font.BOLD, 17));  
    Color scrollborder=new Color(15,132,210); 
    s.setBorder(new LineBorder(scrollborder, 4)); 
    s.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); 
    add(s); 


    configure=new JButton("CONFIGURE"); 
    configure.setBounds(80,575, 120, 35);  
    Color configureborder=new Color(30,144,255); 
    configure.setBorder(new LineBorder(configureborder, 3)); 
    Color configurebackground=new Color(50,205,50); 
    configure.setBackground(configurebackground); 
    configure.setFont(new Font("arial",Font.BOLD,15)); 
    configure.setForeground(Color.WHITE); 
    add(configure); 
    delete=new JButton("DELETE"); 
    delete.setBounds(230,575, 120, 35);  
    Color deleteborder=new Color(30,144,255); 
    delete.setBorder(new LineBorder(deleteborder, 3)); 
    Color deletebackground=new Color(220,20,60); 
    delete.setBackground(deletebackground); 
    delete.setFont(new Font("arial",Font.BOLD,15)); 
    delete.setForeground(Color.WHITE); 
    add(delete); 



} 

protected void simpleset() 
{ 
    // TODO Auto-generated method stub 
    String data=mod.getSelectedItem().toString(); 
    System.out.println(data); 

    String num=id.getText(); 


    String columnNames[] = { "S-NET Device","S-NET ID"}; 
    Object[][] row={{data,num}}; 
    for(int i=0;i<row.length;i++) 
    { 
    System.out.println(row[i]); 
    } 

    DefaultTableModel dtm = new DefaultTableModel(0, 0); 
    dtm.setColumnIdentifiers(columnNames);  

    List<String> list = new ArrayList<String>(); 

    list.add(num); 
    list.add(data); 

    dtm.addRow(list.toArray()); 

    t.setModel(dtm);    
    DefaultTableCellRenderer rightRenderer=new DefaultTableCellRenderer();            
    rightRenderer.setHorizontalAlignment(SwingConstants.CENTER); 
    t.getColumnModel().getColumn(0).setCellRenderer(rightRenderer); 
    t.getColumnModel().getColumn(1).setCellRenderer(rightRenderer);   



} 
+0

JTextField的文本可以是「」,但它永遠不會爲空。 –

+0

@Maurice Perry寫道:「JTextField的文本可以是」「,但它永遠不是null.',我確信它可以返回(JTextComponents)null,空值(例如)在字符串(char,任何字符包含空格), – mKorbel

+0

@mKorbel,正如我所說的,它可以是一個空字符串,不能爲空。 –

回答

2

你simpleset()重新創建每次通話的TableModel。

DefaultTableModel dtm = new DefaultTableModel(0, 0); 
... 
t.setModel(dtm); 

創建它只有一次,存儲作爲一個字段(或從JTable的實例獲得),並使用addRow()或insertRow()方法來插入新的數據。

1

問題是,您每次點擊添加按鈕時都會重新創建整個表格模型。表格模型(以及表格單元格渲染器,btw)必須在初始化時創建一次,並且只需在單擊該按鈕時調用addRow。

+0

謝謝所有...它對我很好 – link