JFram com dois JTextField

5 respostas
T

Boas, sou o Tregosa e estou em Portugal ;
Estou a iniciar-me em Java. Para tal estou a fazer um pequeno programa que lê uma porta serie (tipo hyperterminal) e coloca os dados num JFrame com dois JTextField, um inidica o status da porta (aberto ou fechado) e outro indica os dados lidos da porta serie.
A comunicação serie está Ok, indicador do Status tambem está Ok.
O problema está quando “abro” o Jframe, como o programa verifica primeiro o status da porta ele imprime no JTextField correcto o estado da mesma, mas quando começa a exibir os dados da porta serie, abre um novo JFrame com o campo da porta serie.
Resumindo, fico com dois JFrames abertos, num está preenchido o JTextField correspondente ao statatus e no outro está preenchido o que corresponde a porta serie.

Alguem me pode ajudar a solucionar este problema? (ter um unico Jframe com os dois campos preenchidos!!!)

Obrigado pela atenção.

5 Respostas

L

Não entendi direito !!! posta aí o código que está abrindo o JFrame…
O pouco que entendi… tem que postar os dois componentes num jframe só…

T

Olá, desculpa a demora.
Aqui estão as minhas classes:

public class Main  {

public static void main (String[] args) throws Exception

{

String y=COM7;

PortsGes x= new PortsGes();

x.connect(y);

x.disconnect();

}

}
/<em>esta class é para fazer a gestão da porta COM7</em>/

public class PortsGes extends Test {

gnu.io.SerialPort serialPort;

gnu.io.CommPortIdentifier portIdentifier;
public void connect (String portName) throws Exception

{

portIdentifier = CommPortIdentifier.getPortIdentifier(portName);

if (portIdentifier.isCurrentlyOwned()){

printOnStatusjFT(Port in use);

} else{

serialPort(SerialPort)portIdentifier.open(ConfigPorts,2000);

serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8,

SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);  serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);

printOnStatusjFT(Port Opened);

InputStream in = serialPort.getInputStream();

(new Thread(new SerialReader(in))).start();

}

}
public void disconnect ()
{    
    serialPort.close();
    printOnStatusjFT("Port Closed");
    portIdentifier = null;
    serialPort = null;
}

}

/* esta class faz a leitura da porta serie*/

public  class SerialReader extends Test implements Runnable

{

InputStream in;
SerialReader (InputStream in)
{
 this.in= in;
}
       
public void run ()
{
    byte[] buffer = new byte[1024];
    int len=1, x=1;
    
    try
    {
         while((len=this.in.read(buffer))>-1)
          {
            printOnPesojTA(new String(buffer,0,len));
          }
    }
        catch (IOException e)
        {
            e.printStackTrace();
        }
 }

}

public class Test extends javax.swing.JFrame {

public Test() {
    initComponents();
    setVisible(true);
}

               
private void initComponents() {/* codigo automatico gerado pelo NETBeans*/

    jPanel1 = new javax.swing.JPanel();
    mainJPanel = new javax.swing.JPanel();
    jScrollPane1 = new javax.swing.JScrollPane();
    pesojTA = new javax.swing.JTextArea();
    statusjLb = new javax.swing.JLabel();
    statusjTF = new javax.swing.JTextField();
    stpjBut = new javax.swing.JButton();
    sttjBut = new javax.swing.JButton();

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 100, Short.MAX_VALUE)
    );
    jPanel1Layout.setVerticalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 100, Short.MAX_VALUE)
    );

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setTitle("Teste");
    setAlwaysOnTop(true);

    pesojTA.setColumns(20);
    pesojTA.setRows(5);
    jScrollPane1.setViewportView(pesojTA);

    statusjLb.setText("Status Bar");

    statusjTF.setEditable(false);

    stpjBut.setText("STOP");
    stpjBut.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            stpjButActionPerformed(evt);
        }
    });

    sttjBut.setText("START");

    javax.swing.GroupLayout mainJPanelLayout = new javax.swing.GroupLayout(mainJPanel);
    mainJPanel.setLayout(mainJPanelLayout);
    mainJPanelLayout.setHorizontalGroup(
        mainJPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(mainJPanelLayout.createSequentialGroup()
            .addContainerGap()
            .addGroup(mainJPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 432, Short.MAX_VALUE)
                .addComponent(statusjTF, javax.swing.GroupLayout.DEFAULT_SIZE, 432, Short.MAX_VALUE)
                .addGroup(mainJPanelLayout.createSequentialGroup()
                    .addComponent(statusjLb)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 252, Short.MAX_VALUE)
                    .addComponent(sttjBut)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(stpjBut)))
            .addContainerGap())
    );
    mainJPanelLayout.setVerticalGroup(
        mainJPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, mainJPanelLayout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 206, Short.MAX_VALUE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addGroup(mainJPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(statusjLb)
                .addComponent(stpjBut)
                .addComponent(sttjBut))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
            .addComponent(statusjTF, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap())
    );

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(mainJPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap())
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(mainJPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addContainerGap())
    );

    pack();
}// </editor-fold>                        

private void stpjButActionPerformed(java.awt.event.ActionEvent evt) {                                        
    // TODO add your handling code here:
}
public void printOnStatusjFT(String stt ){

statusjTF.setText(stt);

}
public void printOnPesojTA(String pso){

pesojTA.setText(pso);

pesojTA.setLineWrap(true);

}

// Variables declaration - do not modify

private javax.swing.JPanel jPanel1;

private javax.swing.JScrollPane jScrollPane1;

private javax.swing.JPanel mainJPanel;

private javax.swing.JTextArea pesojTA;

private javax.swing.JLabel statusjLb;

private javax.swing.JTextField statusjTF;

private javax.swing.JButton stpjBut;

private javax.swing.JButton sttjBut;

// End of variables declaration

}

Obrigado pela ajuda
Tregosa

Z

Blz,
utilize as tags “Code” para colocar código e separe os códigos por arquivos(ficheiros) para facilitar o entendimento do seu código.
http://www.guj.com.br/posts/list/50115.java

O problema acontece pq as classes “PortsGes” e “SerialReader” extendem a classe “Test” e portanto na instanciação de “PortsGes” e “SerialReader” é chamado o construtor de “Test”

public Test() {
	initComponents();
	setVisible(true);
}

esse construtor cria um novo frame.

Falou…

T

O que deveo fazer?
Pode-me dar umas indicações.
Obrigado

Z

Blz, da um olhada nesse link só pra completar a explicação anterior.
http://www.guj.com.br/posts/list/2235.java

Não sei se é o melhor jeito, mas eu tiraria o “extends Test” da classe SerialReader e colocaria ela como uma classe interna da classe Test, fazendo as alterações necessárias.

Ps:Não testei…

Falou.

Criado 28 de julho de 2008
Ultima resposta 1 de ago. de 2008
Respostas 5
Participantes 3