자바 다른 클래스 멤버 변수 불러오기

조회수 3340회

안녕하세요 영어단어장을 만들어 보려고 하는 초보 자바 개발자입니다. 같은 패키지 내의 클래스에서 선언한 변수를 새로 만든 다른 클래스에서 불러 쓰려고 하는데 어떻게 해야할 지 모르겠습니다. v1이나 v2를 불러서 쓰고 싶습니다. (영어 단어장에 입력한 영어단어를 랜덤으로 불러와 문제를 내려고 하는 게 목적)

더불어 스크롤 팬이 등록이 안되는 이유도 궁급합니다.

전체코드입니다. import javax.swing.; import java.awt.; import java.awt.event.; import java.util.;

public class Main extends JFrame { private JTextField tf = new JTextField(15); // 영어 단어를 입력 private JTextField kf = new JTextField(15); // 한글 단어를 입력 public Vector v = new Vector(); // 영단어 입력하여 저장 public JList englist = new JList(v); // 영단어 출력리스트 public Vector v2 = new Vector(); // 영단어 입력하여 저장 public JList korlist = new JList(v2); // 영단어 출력리스트

public Main() {
    setTitle("14118874 김태준 영단어장");    // 프레임 이름
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 프레임 윈도우를 닫으면 프로그램을 종료하도록 설정
    Container c = getContentPane(); // 컨텐트 팬을 알아냄
    c.setLayout(null);  // 배치관리자 제거

    createMenu();   // 메뉴를 생성하는 함수 호출

    // 컴포넌트 절대 위치와 절대 크기 지정
    JLabel input = new JLabel("영단어를 입력 <Enter>키 혹은 <입력 버튼> 클릭");  // 라벨 생성
    input.setSize(300,50);  // 절대 크기
    input.setLocation(10, 0);   // 절대 위치
    c.add(input);   // 콘테이너에 추가

    JLabel eng = new JLabel("영단어");   // 라벨 생성
    eng.setSize(100,50);    // 절대 크기
    eng.setLocation(10, 50);    // 절대 위치
    c.add(eng); // 콘테이너에 추가

    tf.setSize(150,30); // 영단어 입력 필드 크기 지정 
    tf.setLocation(50,60);  // 영단어 입력 필드 위치 지정
    c.add(tf);  // 텍스트 필드 부착

    JButton inside = new JButton("입력");     // 영단어 부분 입력버튼 생성
    inside.setSize(80,25);  // 크기 지정
    inside.setLocation(205, 62);    // 위치 지정
    c.add(inside);  // 버튼 부착

    JLabel kor = new JLabel("뜻"); // 라벨 생성
    kor.setSize(100,50);    // 절대 크기
    kor.setLocation(30, 100);   // 절대 위치
    c.add(kor); // 콘테이너에 추가

    kf.setSize(150,30); // 영단어 입력 필드 크기 지정 
    kf.setLocation(50,110); // 영단어 입력 필드 위치 지정
    c.add(kf);  // 텍스트 필드 부착

    JButton insidebutton = new JButton("입력");       // 영단어 부분 입력버튼 생성
    insidebutton.setSize(80,25);    // 크기 지정
    insidebutton.setLocation(205, 112); // 위치 지정
    c.add(insidebutton);    // 버튼 부착

    JLabel english = new JLabel("<영단어>"); // 라벨 생성
    english.setSize(100,50);    // 절대 크기
    english.setLocation(55, 150);   // 절대 위치
    c.add(english); // 콘테이너에 추가

    // 영어 창 설정 사이즈 135,270/위치 10,150
    englist.setVisibleRowCount(15); // list에 표시할 항목 수 
    englist.setFixedCellWidth(135); // list의 너비
    englist.setSize(135, 230);
    englist.setLocation(10, 190);
    **add(new JScrollPane(englist));    // 이부분이 안됨
    c.add(englist); // 콘테이너에 등록**

    JLabel korea = new JLabel("<뜻>"); // 라벨 생성
    korea.setSize(100,50);  // 절대 크기
    korea.setLocation(210, 150);    // 절대 위치
    c.add(korea);   // 콘테이너에 추가

    // 한글뜻 창 설정 사이즈 135,270/위치 150,150
    korlist.setVisibleRowCount(15); // list에 표시할 항목 수
    korlist.setFixedCellWidth(135); // list의 너비
    korlist.setSize(135, 230);
    korlist.setLocation(150, 190);
    c.add(korlist); // 콘테이너에 등록

    JLabel copy = new JLabel("Copyright 2019. Kim TaeJun. All rights reserved");    // 저작권 라벨 추가
    copy.setSize(300,50);   // 크기 설정
    copy.setLocation(15,405);   // 위치 설정    
    copy.setForeground(Color.BLUE); // 라벨의 색상 지정
    c.add(copy);

    // 영어 입력창에서 Enter키 입력시 발생하는 이벤트 리스너 등록
    tf.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            JTextField t = (JTextField)e.getSource();   // 텍스트 필드 값을 얻음
            v.add(t.getText()); // 벡터 v에 입력된 이름 추가
            t.setText("");  // 입력한 뒤 텍스트를 비움
            englist.setListData(v); // 영어 단어쪽에 등록 후 표시
        }
    });

    // inside 버튼을 누르면 일어나는 이벤트 리스너 등록
    inside.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent e) {
            String ss = tf.getText();   // 영어 단어를 입력한 곳에서 값을 얻어 String 값에 저장
            v.add(ss);  // 벡터 v에 입력된 이름 추가
            tf.setText(""); // 입력한 뒤 텍스트를 비움
            englist.setListData(v); // 영어단어 쪽에 표시
        }
    });

    // 한글 입력창에서 Enter키 입력시 발생하는 이벤트 리스너 등록
    kf.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            JTextField t = (JTextField)e.getSource();   // 텍스트 필드 값을 얻음
            v2.add(t.getText());    // 벡터 v2에 입력된 이름 추가
            t.setText("");  // 입력한 뒤 텍스트를 비움    
            korlist.setListData(v2);    // 한글 단어쪽에 표시
        }
    });

    // insidebutton 버튼을 누르면 일어나는 이벤트 리스너 등록
    insidebutton.addActionListener(new ActionListener() {   
        public void actionPerformed(ActionEvent e) {
            String ss2 = kf.getText();  // 한글을 입력한 곳에서 값을 얻어 String 값에 저장
            v2.add(ss2);    // 벡터 v에 입력된 이름 추가
            kf.setText(""); // 입력한 뒤 텍스트를 비움
            korlist.setListData(v2);    // 영어단어 쪽에 표시
            }
        });

    setSize(300,500);   // 프레임 크기 설정
    setVisible(true);   // 화면에 프레임 출력
    setResizable(false);    // 화면 프레임 고정(변경 불가) = 윈도우 최대화 버튼 비활성화 및 크기 변경 불가
}

private void createMenu() { // 메뉴 생성 함수
    JMenuBar mb = new JMenuBar();   // 메뉴바 생성

    JMenu menu = new JMenu("메뉴");
    mb.add(menu);
    JMenuItem mItem = new JMenuItem("테스트");   // 메뉴 아이템 생성
    menu.add(mItem);    // 아이템 메뉴에 붙이기
    mItem.addActionListener(new MyAction());    // 테스트를 누르면 액션 리스너가 생성됨

    setJMenuBar(mb);    // 메뉴바 보이게 함
}

class MyAction implements ActionListener {  // 액션 리스너구현
    public void actionPerformed(ActionEvent e) {
         new EnglishTest(); // 영단어 테스트 호출
    }
}


public static void main(String[] args) {
    // TODO Auto-generated method stub
    new Main();
}

}

이 새로운 클래스에서 사용하려고 합니다.

import javax.swing.; import java.awt.; import java.awt.event.; import java.util.math.; import java.Main.*;

public class EnglishTest extends JFrame { public EnglishTest() { setTitle("영단어 테스트"); // 프레임 이름 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 프레임 윈도우를 닫으면 프로그램을 종료하도록 설정 Container c = getContentPane(); // 컨텐트 팬을 알아냄 c.setLayout(null); // 배치관리자 제거 setSize(300,500); // 프레임 크기 설정 setVisible(true); // 화면에 프레임 출력 setResizable(false); // 화면 프레임 고정(변경 불가) = 윈도우 최대화 버튼 비활성화 및 크기 변경 불가

        JLabel test = new JLabel("영단어 테스트입니다.");
        test.setSize(150,50);
        test.setLocation(80,5);
        c.add(test);

        JLabel a1 = new JLabel("<영어단어>");
        a1.setSize(100,100);
        a1.setLocation(110,15);
        c.add(a1);

        JList<String> window = new JList<String>();
        window.setSize(300,100);
        window.setLocation(50, 85);
        c.add(window);

        v2.get(1); // ??

    }

}

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)