2017-12-16 32 views
-1

이 코드의 용도 [Open Java 파일이 새 탭에 표시됩니다.] 또한 func를 컴파일하려고 시도하지만이 문제를 먼저 해결해야합니다.Java 탭의 내용이 계속 이동합니다.

내 문제는 새로운 Java 파일을 열려고 할 때 자바 파일의 마지막 내용이 누적되어 Java 파일의 새 내용으로 열리는 것입니다. 나는 왜 이것을 모르는 방법이 있을지 모르겠다. 당신은 JTextArea의 두 인스턴스를 만들

package term_project_GUI; 

import javax.swing.*; 
import javax.swing.filechooser.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 

public class JavaIDE_UI extends JFrame { 
    Container contentPane; 

    JTabbedPane tp; 
    JPanel p1 = new JPanel(); 
    JPanel p2 = new JPanel(); 
    JTextArea ta = new JTextArea(15, 30); 
    JScrollPane sp = new JScrollPane(ta); 

    JavaIDE_UI() { 
     setTitle("JavaIDE"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     createMenu(); 

     contentPane = getContentPane(); 
     contentPane.setLayout(new BorderLayout()); 
     tp = new JTabbedPane(); 
     contentPane.add(tp, BorderLayout.NORTH); 
     contentPane.add(p2, BorderLayout.SOUTH); 

     setSize(400, 500); 
     setVisible(true); 
    } 

    void createMenu() { 
     JMenuBar mb = new JMenuBar(); 
     JMenu File = new JMenu("File"); 
     JMenu Run = new JMenu("Run"); 
     JMenuItem Open = new JMenuItem("Open"); 
     JMenuItem Close = new JMenuItem("Close"); 
     JMenuItem Save = new JMenuItem("Save"); 
     JMenuItem SaveAs = new JMenuItem("Save As"); 
     JMenuItem Quit = new JMenuItem("Quit"); 
     JMenuItem Compile = new JMenuItem("Compile"); 

    Open.addActionListener(new OpenActionListener_open()); 

    File.add(Open); 
    File.add(Close); 
    File.add(Save); 
    File.add(SaveAs); 
    File.add(Quit); 

    Run.add(Compile); 

    mb.add(File); 
    mb.add(Run); 

    setJMenuBar(mb); 
} 

class OpenActionListener_open implements ActionListener { 
    JFileChooser chooser; 
    JTextArea ta = new JTextArea(15, 30); 

    OpenActionListener_open() { 
     chooser = new JFileChooser(); 
    } 

    public void actionPerformed(ActionEvent e) { 
     FileNameExtensionFilter filter = new FileNameExtensionFilter(".java files", "java"); 
     chooser.setFileFilter(filter); 

     int ret = chooser.showOpenDialog(null); 
     if (ret != JFileChooser.APPROVE_OPTION) { 
      JOptionPane.showMessageDialog(null, "File Unchoose.", "Warning", JOptionPane.WARNING_MESSAGE); 
      return; 
     } 


     String fileName = chooser.getSelectedFile().getName(); 
     tp.addTab(fileName, new JScrollPane(ta)); 

     String filePath = chooser.getSelectedFile().getPath(); 
     try { 
      BufferedReader reader = new BufferedReader(new FileReader(filePath)); 
      String data = ""; 
      while ((data = reader.readLine()) != null) { 
       ta.append(data+"\n"); 
      } 
      reader.close(); 
     } catch (IOException e1) { 
     } 


    } 
} 

public static void main(String[] args) { 
    new JavaIDE_UI(); 
} 
} 
+1

너무 – MadProgrammer

답변

1

, 하나는 JavaIDE_UI의 인스턴스 필드이고 다른 하나는 OpenActionListener_open의 인스턴스 필드입니다. actionPerformed 메서드를 호출 할

, 또한 그것에서 제거됩니다 기존합니다 (OpenActionListener_open의) JTextArea, 프로세스에 텍스트를 추가하는 것은 현재 탭/스크롤 창 그리고 당신이 창조 한 새로운으로 이동

그래서 대신에, 당신이 새롭게 문을 연 파일을 볼 수 있도록 또한 탭을 선택합니다 ...

class OpenActionListener_open implements ActionListener { 

    JFileChooser chooser; 

    OpenActionListener_open() { 
     chooser = new JFileChooser(); 
    } 

    public void actionPerformed(ActionEvent e) { 
     FileNameExtensionFilter filter = new FileNameExtensionFilter(".java files", "java"); 
     chooser.setFileFilter(filter); 

     int ret = chooser.showOpenDialog(null); 
     if (ret != JFileChooser.APPROVE_OPTION) { 
      JOptionPane.showMessageDialog(null, "File Unchoose.", "Warning", JOptionPane.WARNING_MESSAGE); 
      return; 
     } 

     String fileName = chooser.getSelectedFile().getName(); 
     JTextArea ta = new JTextArea(); 
     JScrollPane sp = new JScrollPane(ta); 
     tp.addTab(fileName, sp); 

     String filePath = chooser.getSelectedFile().getPath(); 
     try { 
      BufferedReader reader = new BufferedReader(new FileReader(filePath)); 
      String data = ""; 
      while ((data = reader.readLine()) != null) { 
       ta.append(data + "\n"); 
      } 
      reader.close(); 
     } catch (IOException e1) { 
     } 
     tp.setSelectedComponent(sp); 

    } 
} 

이 예제를 각 탭에 대한 새로운 JTextArea을 만들 수 있습니다.

또한, 나는 그렇지 않으면 당신은 몇 가지 이상한 레이아웃을 할거야, contentPane.add(tp, BorderLayout.NORTH);contentPane.add(tp);로 변경됩니다

+0

저를 도와 주셔서 감사 각 탭에 대한 새로운'JTextArea' 만들기 발행합니다. 내 목표는 GUI를 사용하여 JavaIDE를 코딩하는 것이다. 그래서 마침내 North pane에서 인쇄 한 Java 파일을 컴파일하십시오. 그 때문에 BorderLayout을 North로 설정했습니다. – Taker829

+0

나는 이것을 위해 너를 어떻게 생각하는지 충분히 타이핑 할 수 없다. 고맙습니다. – Taker829

+0

북쪽 위치에 놓았을 때 이상한 레이아웃 문제가 발생했습니다. – MadProgrammer