Как опубликовать новую строку в текстовое поле JPanel после установки начального значения? - PullRequest
0 голосов
/ 18 ноября 2011

Я пытаюсь понять, как работает JFrame.Я пишу программу, которая будет читать содержимое файла и отображать его в текстовой области в виде двоичной строки.Я уже выполнил задачу в строгом формате окна командной строки.Затем я понял, что мне нужно выполнить задачу через окно JPane.Итак, у меня есть код, который я написал, который позволяет пользователю выбрать файл для ввода, код затем проверяет допустимый файл, и, если он там есть, то код считывает один байт за раз, превращает его в двоичный файл,и добавляет его в строку.После считывания всего файла строка отображается как длинный двоичный файл в командной строке.Но мне нужно выполнить эту задачу в реальном JFrame, который мне удалось создать.Но теперь я не могу понять, где и как, я должен обновить текстовое поле строкой двоичной информации, после того, как оно будет прочитано и создано.Вот код:

import java.awt.*;
import java.util.*;
import java.io.*;
import javax.swing.*;
import java.lang.*;

public class BinaryEditor extends JFrame{

    public static String myExtension ="";
    public static boolean isThere=false;
    public static String myFile="";;
    public static String by;
    public static String myDisplay="";

//******************************************************************************

    public BinaryEditor(){

        //setLayout(new BorderLayout(5,10));
        setLayout(new GridLayout(3,2,5,5));
        //Set up panels for main display  
        JPanel fileInput = new JPanel(); 
        JPanel binaryPanel = new JPanel();
        JPanel saveBinary = new JPanel();         

        //Add the panels to the frame 
        add(fileInput);
        add(binaryPanel);
        add(saveBinary);

        //Set up panel properties 
        fileInput.setBackground(Color.BLUE);
        fileInput.setFont(new Font("Californian FB", Font.BOLD, 12));
        binaryPanel.setBackground(Color.WHITE);
        binaryPanel.setFont(new Font("Californian FB", Font.BOLD, 12));
        saveBinary.setBackground(Color.GRAY);
        saveBinary.setFont(new Font("Californian FB", Font.BOLD, 12));  
        JTextField myDisplay = new JTextField(16);


        //Add contents to the panels
        fileInput.add(new JLabel("Enter a File"));
        fileInput.add(new JTextField(8));
        binaryPanel.add(new JTextArea("",10,22));
        saveBinary.add(new JButton("Save file"));
        binaryPanel.add(myDisplay);
    }

//******************************************************************************    

    //Main Method
    public static void main(String[] args) throws IOException {

        //Create a JFrame panel, set it up and display it
        BinaryEditor frame = new BinaryEditor();
        frame.setSize(300,300);
        frame.setTitle("Binary Editor");
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        //Ask user for filename
        Scanner input = new Scanner(System.in); 
        do{
        System.out.print("Please input a filename to read : ");
        myFile = input.next();

        //Validate filename and existance
        checkmyFile(myFile);
        if(!isThere)
            System.out.println("No such filename.");
        }while(!isThere);

        //File exists, now open file for reading
       readFile();
       System.out.println(myDisplay);
       repaint();
    }

//******************************************************************************    

    //Method to check filename
    public static boolean checkmyFile(String theFile){

        //Check for file existance
        File file=new File(theFile);
        boolean exists = file.exists();
        if (!exists) {
            isThere=false; 
        }else{
            isThere=true;
        }
        return isThere;
    }

//******************************************************************************    

    //Method to read file into array
    public static void readFile()throws IOException{
        FileInputStream myInput = new FileInputStream(myFile);
        int numberBytes = myInput.available();
        byte bytearray[] = new byte[numberBytes];
        //Read entire file into bytearray
        myInput.read(bytearray);

        for(int i = 0; i < numberBytes; i++){
            //System.out.println (bytearray[i]);
            by = Integer.toBinaryString(bytearray[i]);
            //System.out.print(by+"*"); 
            myDisplay +=by;
        }
        myInput.close();
        //myDisplay.
    }  

}//End of MAIN Method

1 Ответ

0 голосов
/ 20 января 2012

Сначала ваш JTextField должен быть объявлен как объект класса, затем вам нужно удалить его объявление и создание экземпляра из конструктора BynaryEditor.

Если вы объявите JTextField в конструкторе, он будет виден как переменная метода, а не переменная класса, а в остальном коде вы не сможете вызывать методы для него.

Во-вторых, когда вы читаете данные из файла, вам нужно вызвать метод setText () из JTextField , необходимый для отображения данных из файла.

Вы можете легко сделать это следующим образом:

public class BinaryEditor extends JFrame{
        /* class variable declaration and instantiation */

        private JTextField myDisplay = new JTextField(16);

        /* other code.. */

, и в вашем методе readFile() после чтения данных вы можете добавить строку:

myDisplay.setText(by);

В этомКстати, ваша строка by будет отображаться в вашем JTextField.

...