2016-07-29 58 views
0

我正在制作一个java应用程序,它使用了总共​​4个类Main,Form1,Form2ZBC。我试图通过ZBC类中的某些代码附加JTextArea,它位于Form2上。从另一个类追加jtextarea

的第一个问题是尝试时,追加JTextArea我得到一个错误,因为JTextarea不是static - 如果我改变JTextAreastatic我也得到一个错误。

我试图追加使用Form2.jtaConsole.append("TEST");的文本框,因为这是我以前的做法。

有没有什么办法可以从另一个类追加这个文本区?

我将发布下面每个类的代码;

任何帮助appriciaed!

Main.java

package com.company; 
public class Main 
{ 
    public static void main(String[] args) 
    { 
     Form1 f1 = new Form1(); 
     f1.open(); 
    } 
} 

Form1.java

package com.company; 
import javax.swing.*; 
public class Form1 
{ 
    //Declare GUI items 
    private JComboBox comboBox1; 
    private JButton goButton; 
    private JPanel jp_one; 

    public Form1() 
    { 
     comboBox1.addActionListener(e -> 
     { 
      Object selected **= comboBox1.getSelectedItem().toString(); 
     }); 

     goButton.addActionListener(e -> 
     { 
      Form2 f2 = new Form2(comboBox1.getSelectedItem().toString()); 
     }); 
    } 
    public static void open() 
    { 
     JFrame frame = new JFrame("Zebra Print"); 
     frame.setContentPane(new Form1().jp_one); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
     frame.setResizable(true); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
    } 
} 

Form2.java

package com.company; 
import javax.swing.*; 

class Form2 
{ 
    //Declare GUI items 
    public JTextArea jtaConsole; 
    public JPanel Jframer; 
    public JButton stopButton; 
    public JButton startButton; 
    String IP1 = "172.20.9.61"; 
    int PORT1 = 9100; 
    ZBC ZBC = new ZBC(); 
    Thread t1 = new Thread(ZBC); 

    public Form2(String message) 
    { 
     JFrame frame = new JFrame("Zebra Print"); 
     frame.setContentPane(this.Jframer); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setResizable(true); 
     frame.setVisible(true); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 

     jtaConsole.append("//////////// CONSOLE ////////////\n\n"); 
     jtaConsole.append("- User selected: " + message + "\n"); 
     jtaConsole.append("- IP: "+IP1+"\n"); 
     jtaConsole.append("- PORT: "+PORT1+"\n\n"); 

     startButton.addActionListener(e -> 
     { 
      jtaConsole.append("- Program is now running..\n\n"); 
      //Starts the ZBC class on a new thread 
      t1.start(); 
     }); 

     stopButton.addActionListener(e -> 
       jtaConsole.append("- Program is now paused..\n\n")); 
    } 
} 

ZBC.java

package com.company; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.net.Socket; 
import java.sql.*; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class ZBC implements Runnable 
{ 
@Override 
public void run() 
{ 
    while (true) 
    { 
     // Connect & Select SQL 
     String connectionString = "jdbc:sqlserver://:;database=;user=;password=;"; 
     String SQL = "SELECT [PK_PrintQueueID],[FK_PrinterID],[FK_BarcodeTypeID],[Barcode],[Quantity],[QueueDate],[ProcessedDate] FROM [X].[dbo].[PrintQueue] WHERE ProcessedDate IS NULL"; 
     Connection connection = null; 
     // Time & Date 
     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     Date date = new Date(); 
     try 
     { 
      connection = DriverManager.getConnection(connectionString); 
      Statement stmt = connection.createStatement(); 
      Statement stmt2; 
      ResultSet rs = stmt.executeQuery(SQL); 
      while (rs.next()) 
      { 
       String FK_BarcodeTypeID = rs.getString("FK_BarcodeTypeID"); 
       String barcode = rs.getString("Barcode"); 
       String[] parts = barcode.split("-"); 
       String part1 = parts[0]; 
       String SQL2 = "UPDATE PrintQueue SET ProcessedDate = '" + dateFormat.format(date) + "' WHERE PK_PrintQueueID = '" + rs.getString("PK_PrintQueueID") + "'"; 
       stmt2 = connection.createStatement(); 
       stmt2.executeUpdate(SQL2); 

       if (FK_BarcodeTypeID.equals("1")) 
       { 
        // Type 128 barcode. 
        String zpl = "^XA^BY2,3,140^FT80,200^BCN,Y,N,N^FD>:" + rs.getString("Barcode") + "^FS^FT200,250^A0N,42,40^FH^FD" + part1 + "^FS^XZ"; 
        //printlabel(zpl); 
        System.out.println("New serialized barcode added.\nPrinting: " + (rs.getString("Barcode"))); 
        System.out.println("Process date: " + dateFormat.format(date) + ".\n"); 
        Form2.jtaConsole.append("TEST"); 

       } else 
       { 
        // Type 39 barcode. 
        String zpl = "CT~~CD,~CC^~CT~ ^XA~TA000~JSN^LT0^MNW^MTT^PON^PMN^LH0,0^JMA^PR4,4~SD15^JUS^LRN^CI0^XZ^XA^MMT^PW674^LL0376 ^LS0 ^BY2,3,151^FT84,249^BCN,,Y,N^FD>:" + rs.getString("Barcode") + "^FS ^PQ1,0,1,Y^XZ"; 
        //printlabel(zpl); 
        System.out.println("New un-serialized barcode added.\nPrinting: " + (rs.getString("Barcode"))); 
        System.out.println("Process date: " + dateFormat.format(date) + ".\n"); 
       } 
      } 
     } catch (SQLException e) 
     { 
      e.printStackTrace(); 
     } 
     try 
     { 
      Thread.sleep(3000); 
     } 
     catch (InterruptedException e) 
     { 
      e.printStackTrace(); 
     } 
     System.out.println("Checking for new barcode.."); 
    } 
} 
public void printlabel(String zpl) 
{ 
    try 
    { 
     Socket clientSocket; 
     clientSocket = new Socket(IP,PORT); 
     DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); 
     outToServer.writeBytes(zpl); 
     clientSocket.close(); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
} 
} 
+0

参见[多个JFrames,好/坏习惯的用?(http://stackoverflow.com/q/9554636/418556) –

+0

@AndrewThompson啊,OK - 感谢这个 – mrdarb

回答

2

首先,你需要使用Form2的对象ZBC。您可以使用

t1.setForm2(this); 

from Form2。 ,创造在ZBC一个setter为setForm2喜欢 -

private Form2 form2; 
public void setForm2(final Form2 obj){ 
    this.form2=obj; 
} 

现在你有没有对象。 现在你做,

form2.jtaConsole.append("TEST"); 
form2.jtaConsole.repaint(); 
form2.jtaConsole.revalidate(); 

请让我知道这是否有帮助。

+0

@Sursebdu您好,感谢的帮助 - 我会在哪里使用t1.setForm2(this);在ZBC.java中? – mrdarb

+0

你可以在Form1中紧跟t1.start(); – Sirsendu

+0

我试过这个,但没有运气..说方法不能解决form2 – mrdarb