Entrada de Dados para Metodo Simplex

4 respostas
theneto.pro

[size=12]Ola Galera!

Estou precisando da ajuda de vcs mais uma vez!

Estou tentando fazer um programa que resolva problemas de programação lenear pelo Metodo Simplex!

A grande dificuldade esta sendo na entrada de dados, pois ela deve ser dinamica.
o usuario coloca o numero de variaveis q sera o problema e o numero de restriçoes e apartir dai cria uma matriz.
por exemplo se ele entrar com numero de variaveis = 3 e numero de restriçoes = 4, tem q criar uma matriz 3X4.[/size]

[size=14]o ploblema esta em fazer isso de modo grafico. Como Faço pra representar essa matriz na tela, apresentando campos de entrada correspondentes aos campos da matriz!
tipo varios campos do tipo JTextField. como crio esses campos na tela dinamicamente?[/size]

Desde ja agradeço se puderem me ajudar!

4 Respostas

JoaoBluSCBR

Acho que é relativamente fácil:

Cria um array de 2 dimensões de campos que você quer colocar, ou de labels, ou de botões, tanto faz.

E os coloca na tela na posição que quer controlando largura, altura e um gap de distancia entre eles.

import java.awt.Container;
import java.awt.Dimension;

/**
 * @author joao
 */

public class TelaMatriz extends javax.swing.JFrame {
    
    private int linhas;
    private int colunas;
    private javax.swing.JTextField tfCampo[][];

    /** Creates new form TelaMatriz */
    public TelaMatriz(int lin, int col) {
        linhas = lin;
        colunas = col;
        initComponents();
    }

    private void initComponents() {
        
        Container ctn = this.getContentPane();
        ctn.setPreferredSize(new Dimension(800, 600));
        
        tfCampo = new javax.swing.JTextField[linhas][colunas];
        
        ctn.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        int posX = 50;
        int posY = 50;
        int larg = 50;//Largura do campo texto
        int alt = 30;//Altura do campo texto
        int gap = 5;//Distancia entre um campo e outro.
        for(int i=0; i<linhas; i++){
            posX = 50;
            for(int j=0; j<colunas; j++){        
                tfCampo[i][j] = new javax.swing.JTextField();
                
                
                tfCampo[i][j].addActionListener(new java.awt.event.ActionListener() {
                    public void actionPerformed(java.awt.event.ActionEvent evt) {
                        tfCampoActionPerformed(evt);
                    }
                });
                
                ctn.add(tfCampo[i][j], new org.netbeans.lib.awtextra.AbsoluteConstraints(posX, posY, larg, alt));
                posX = posX + larg + gap;
            }
            posY = posY + alt + gap;
        }

        pack();
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);        
        this.setPreferredSize(new Dimension(800,600));
        this.setVisible(true);
    }
    
    private void tfCampoActionPerformed(java.awt.event.ActionEvent evt) {
        //Aqui você pode analisar os conteúdos dos tfCampo usando for duplos e quando todos estiverem preenchidos, disparar algum método.
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                //Os parâmetros indicam número de linhas e colunas respectivamente.
                new TelaMatriz(8, 13);
            }
        });
    }        
}
theneto.pro

ola amigo!
obrigado pela ajuda!

nao entendi a seguinte linha:

q opção de Layout é essa? nao compila aqui!

e essa outra linha tb nao compila:

JoaoBluSCBR

São linhas necessárias para usar o Absolute Layout.

Eu usei o NetBeans

Faça o seguinte. Crie um novo projeto

Peça um FrameVisual para poder usar o editor Gráfico de telas,
coloque na tela um jTextField e clique na tela e escolha o Absolute Layout.

Daí entre no código e veja como o sistema criou estas linhas no seu caso.
Use-as nestas duas linhas que não estão compilando no seu caso.

JoaoBluSCBR

Não resisti ao desafio de tentar fazer isso com GroupLayout e aí está.

Agora não pode não compilar:

/*
 * TelaMatriz.java
 *
 * Created on 28/06/2011, 14:12:43
 */


import java.awt.Container;
import java.awt.Dimension;

/**
 * @author joao
 */

public class TelaMatriz extends javax.swing.JFrame {
    
    private int linhas;
    private int colunas;
    private javax.swing.JTextField tfCampo[][];

    /** Creates new form TelaMatriz */
    public TelaMatriz(int lin, int col) {
        linhas = lin;
        colunas = col;
        initComponents();
    }

    private void initComponents() {
        
        tfCampo = new javax.swing.JTextField[linhas][colunas];
        
        //Cria os campos texto e adiciona eventos a eles
        for(int i=0; i<linhas; i++){
            for(int j=0; j<colunas; j++){        
                tfCampo[i][j] = new javax.swing.JTextField();
                                
                tfCampo[i][j].addActionListener(new java.awt.event.ActionListener() {
                    public void actionPerformed(java.awt.event.ActionEvent evt) {
                        tfCampoActionPerformed(evt);
                    }
                });
            }
        }

        int larg = 50;//Largura do campo texto
        int alt = 30;//Altura do campo texto
        for(int i=0; i<linhas; i++){
            for(int j=0; j<colunas; j++){        
                tfCampo[i][j].setPreferredSize(new Dimension(larg, alt));
            }
        }
        
        //Criando o layout de grupo e adicionando os campos texto nele.
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        
        layout.setAutoCreateGaps(true);

        layout.setAutoCreateContainerGaps(true);

        //Cria um grupo sequencial para eixo horizontal
        javax.swing.GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
        
        //Criar um grupo para cada linha de componentes
        javax.swing.GroupLayout.Group hGrupo[] = new javax.swing.GroupLayout.Group[linhas];
        for(int i=0; i<linhas; i++){
            hGrupo[i] = layout.createParallelGroup();
            for(int j=0; j<colunas; j++){
                hGrupo[i].addComponent(tfCampo[i][j]);
            }  
            hGroup.addGroup(hGrupo[i]);
        }
        layout.setHorizontalGroup(hGroup);
        
        
        // Cria um grupo sequencial para eixo vertical
        javax.swing.GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
        
        //Criar um grupo para cada coluna de componentes
        javax.swing.GroupLayout.Group vGrupo[] = new javax.swing.GroupLayout.Group[colunas];
        for(int i=0; i<colunas; i++){
            vGrupo[i] = layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE);
            for(int j=0; j<linhas; j++){
                vGrupo[i].addComponent(tfCampo[j][i]);
            }  
            vGroup.addGroup(vGrupo[i]);
        }
        layout.setVerticalGroup(vGroup);

        pack();
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);        
        this.setPreferredSize(new Dimension(800,600));
        this.setVisible(true);
    }
    
    private void tfCampoActionPerformed(java.awt.event.ActionEvent evt) {
        //Aqui você pode analisar os conteúdos dos tfCampo usando for duplos e quando todos estiverem preenchidos, disparar algum método.
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                //Os parâmetros indicam número de linhas e colunas respectivamente.
                new TelaMatriz(8, 13);
            }
        });
    }        
}
Criado 28 de junho de 2011
Ultima resposta 29 de jun. de 2011
Respostas 4
Participantes 2