2

这是一个有点愚蠢的问题,但我开始使用 java swing 并且一直做得很好,但我真的不能让 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");
    }
}

我想要完成的是为给定的每个“Estado”添加一列,该程序是关于非确定性自动机的,并为给定的每个“Lenguaje”添加一行,这样我就可以制作转换矩阵,我知道如何制作每个按下按钮的时间,但看起来好像正在添加列,但它根本不可见,只是一个空白方块。

更正建议:

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);
4

1 回答 1

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);
于 2012-04-19T23:58:36.223 回答