2012-04-19 56 views
2

这是有点愚蠢的问题,但我用的Java Swing beggining并一直在做有点大,但我真的不能做一个JTable出现在我的形式,到目前为止出现空白正方形但没有列在所有的,这里有一个片段:JTable的问题,当列

DefaultTableModel modelo = new DefaultTableModel(); 
modelo.setColumnCount(1); 
tblTrans = new JTable(modelo); 
modelo.addColumn("Prueba"); 
tblTrans.revalidate(); 
tblTrans.setBounds(316, 47, 248, 243); 
contentPane.add(tblTrans); 

这里的的情况下,完整的代码,你需要它:

package mx.adk.grafos; 

import java.awt.BorderLayout; 
import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.DefaultListModel; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 
import javax.swing.JButton; 
import javax.swing.ListSelectionModel; 

import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.JList; 
import javax.swing.JTable; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.util.Set; 
import java.util.TreeSet; 

public class GUI extends JFrame implements ActionListener { 

    private JPanel contentPane; 
    private JTextField txtEstados; 
    private JTextField txtLenguaje; 
    private JTextField txtFinal; 
    private JTable tblTrans; 
    private JList lstEstados; 
    private JList lstLenguaje; 

    DefaultListModel listaEstados; 
    TreeSet<String> setEstados = new TreeSet<String>(); 

    DefaultListModel listaLenguaje; 
    TreeSet<Character> setLenguaje = new TreeSet<Character>(); 

    /* 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        GUI frame = new GUI(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 
    */ 

    public void actionPerformed(ActionEvent e) { 
     String comando = e.getActionCommand(); 
     if(comando.equalsIgnoreCase("btnAEstados")){ 
      String tmp = txtEstados.getText(); 
      if(setEstados.add(tmp)){ 
       listaEstados.addElement(tmp); 
      } 
      return; 
     } 
     if(comando.equalsIgnoreCase("btneestados")){ 
      String tmp = (String) lstEstados.getSelectedValue(); 
      setEstados.remove(tmp); 
      listaEstados.removeElement(tmp); 
     } 
     if(comando.equalsIgnoreCase("btnALenguaje")){ 
      char tmp = txtLenguaje.getText().charAt(0); 
      if(setLenguaje.add(tmp)){ 
       listaLenguaje.addElement(tmp); 
      } 
      return; 
     } 
     if(comando.equalsIgnoreCase("btnelenguaje")){ 
      char tmp = (char) lstLenguaje.getSelectedValue().toString().charAt(0); 
      setLenguaje.remove(tmp); 
      listaLenguaje.removeElement(tmp); 
     } 
    } 

    public GUI() { 
     setTitle("Automata finito no deterministico"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 599, 368); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(null); 

     txtEstados = new JTextField(); 
     txtEstados.setBounds(26, 82, 72, 28); 
     contentPane.add(txtEstados); 
     txtEstados.setColumns(10); 

     JButton btnAEstados = new JButton(">>"); 
     btnAEstados.setBounds(103, 69, 51, 29); 
     contentPane.add(btnAEstados); 
     btnAEstados.addActionListener(this); 
     btnAEstados.setActionCommand("btnAEstados"); 

     listaEstados = new DefaultListModel(); 
     lstEstados = new JList(listaEstados); 
     lstEstados.setBounds(154, 46, 105, 109); 
     contentPane.add(lstEstados); 
     lstEstados.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 

     JLabel lblEstados = new JLabel("Estados"); 
     lblEstados.setBounds(83, 19, 59, 16); 
     contentPane.add(lblEstados); 

     JButton btnEEstados = new JButton("<<"); 
     btnEEstados.setBounds(103, 96, 51, 29); 
     contentPane.add(btnEEstados); 
     btnEEstados.addActionListener(this); 
     btnEEstados.setActionCommand("btnEEstados"); 

     JButton btnELenguaje = new JButton("<<"); 
     btnELenguaje.setBounds(103, 231, 51, 29); 
     contentPane.add(btnELenguaje); 
     btnELenguaje.addActionListener(this); 
     btnELenguaje.setActionCommand("btnELenguaje"); 

     JButton btnALenguaje = new JButton(">>"); 
     btnALenguaje.setBounds(103, 204, 51, 29); 
     contentPane.add(btnALenguaje); 
     btnALenguaje.addActionListener(this); 
     btnALenguaje.setActionCommand("btnALenguaje"); 

     txtLenguaje = new JTextField(); 
     txtLenguaje.setColumns(10); 
     txtLenguaje.setBounds(26, 217, 72, 28); 
     contentPane.add(txtLenguaje); 

     listaLenguaje = new DefaultListModel(); 
     lstLenguaje = new JList(listaLenguaje); 
     lstLenguaje.setBounds(154, 181, 105, 109); 
     contentPane.add(lstLenguaje); 
     lstLenguaje.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 

     JLabel lblLenguaje = new JLabel("Lenguaje"); 
     lblLenguaje.setBounds(95, 161, 59, 16); 
     contentPane.add(lblLenguaje); 

     txtFinal = new JTextField(); 
     txtFinal.setText("QFinal"); 
     txtFinal.setColumns(10); 
     txtFinal.setBounds(26, 298, 72, 28); 
     contentPane.add(txtFinal); 

     DefaultTableModel modelo = new DefaultTableModel(); 
     modelo.setColumnCount(1); 
     tblTrans = new JTable(modelo); 
     modelo.addColumn("Prueba"); 
     tblTrans.revalidate(); 
     tblTrans.setBounds(316, 47, 248, 243); 
     contentPane.add(tblTrans); 

     JLabel lblTransiciones = new JLabel("Transiciones"); 
     lblTransiciones.setBounds(394, 19, 89, 16); 
     contentPane.add(lblTransiciones); 

     JButton btnAceptar = new JButton("Aceptar"); 
     btnAceptar.setBounds(476, 311, 117, 29); 
     contentPane.add(btnAceptar); 
     btnAceptar.addActionListener(this); 
     btnAceptar.setActionCommand("btnAceptar"); 
    } 
} 

我想做到的是增加一列给定每个“埃斯塔” ,该程序是关于非确定性自动机,并为每个“Lenguaje”给出的行,所以我可以使transitio n矩阵,每次按下按钮时我都知道如何做到这一点,但它看起来像列被添加,但它根本不可见,只是一个空白的方块。

更正建议:

DefaultTableModel modelo = new DefaultTableModel(); 
     modelo.setColumnCount(1); 
     tblTrans = new JTable(modelo); 
     panel.add(tblTrans); 
     panel.setBounds(316, 47, 248, 243); 
     modelo.addColumn("Test"); 
     tblTrans.revalidate(); 
     contentPane.add(panel); 
+1

将JTable放入JScrollPane中。 – 2012-04-19 23:43:46

+0

没有成功,我已将这个建议复制到我的主要问题中,到目前为止表格仍然是一个空白的方形 – 2012-04-19 23:50:26

+0

如果使用空布局,则必须在JScrollPane上设置边界,而不是在JTable上设置边界。 – 2012-04-19 23:52:48

回答

5

我是对的滚动窗格。这对我很有用:

DefaultTableModel modelo = new DefaultTableModel(); 
    modelo.setColumnCount(1); 
    modelo.addColumn("Prueba"); 
    tblTrans = new JTable(modelo); 
    JScrollPane sPane = new JScrollPane(tblTrans); 
    sPane.setBounds(316, 47, 248, 243); 
    contentPane.add(sPane); 
+0

非常感谢! – 2012-04-20 00:08:29