반응형

 

인텔리제이에 JavaFX 프로젝트 만들기 힘드네요.

그래서 오늘 구글 검색해가며 수행한 내용을 좀 기록해 놓으려고 합니다. 한글 검색으로는 대부분 JavaFX설치 매뉴얼이 이클립스 기준이라.... 인텔리제이 정보 찾느라고 조금 힘들었습니다. 사실 금방 나오지만...영어라...

 

1. 우선 Intellij, JavaSDK는 기본적으로 깔려 있어야 합니다. (예제에서는 JavaSDK 13, JavaFX SDK11을 사용하였습니다.)

 

2. JavaFX SDK를 다운받아서 설치해야합니다. 다운받는 경로는 요기를 참조하세요. 설치..가 아니라 적당한 곳에 압축을 풀어놓으면 됩니다. 참고로 Program Files와 같이 빈칸이 들어간 곳에 하면 나중에 Module 추가부분에서 에러가 발생하니, 주의하시기 바랍니다. "C:\javafx-sdk-11.0.2" 의 형식이 되겠죠?

 

3. JavaFX 프로젝트를 생성합니다.

 

 

 

4. 적당한 이름으로 생성을 합니다. 그러나 JavaFX메뉴로 생성을 한 프로젝트 임에도 아직 JavaFX클래스들을 인식하지 못합니다.

 

 

 

5. 프로젝트 SDK 설정

"File -> Project Structure -> Project" 메뉴를 찾아가서 프로젝트 SDK를 찾아주고, Language Level도 아래와 같이 설정합니다. 무슨 의미인지는 모르겠으나 No new Language features라고 되어있으면 정상이라고 합니다.

 

 

 

6. 라이브러리 설정

"File -> Project Structure -> Libraries"메뉴로 가서 JavaFX 11라이브러리를 추가해 줍니다. 아래 화면에서와 같이 +버튼을 누르고 Java를 선택합니다.

 

 

설치한 라이브러리의 경로를 찾아주고..

 

 

적용할 모듈(생성한 프로젝트)을 선택합니다.

 

 

정상 적용되면 아래와 같이 나옵니다.

 

 

라이브러리가 적용되면 JavaFX 클래스를 인식한다는데, 아직 인식 못할 수도 있습니다..ㅠㅠ

 

7. 모듈 추가

컴파일은 되는데 아래와 같은 에러가 뜬다면 모듈 추가가 필요합니다. (저는 당연히 해야하는 걸로 알겠습니다.)

Error: JavaFX runtime components are missing, and are required to run this application

"Run -> Edit Configurations" 메뉴를 클릭하고

 

 

Run/Debug Configurations 다이얼로그가 나오면 VM options에 아래 내용을 입력합니다.

--module-path %PATH_TO_FX% --add-modules=javafx.controls,javafx.fxml

 

 

%PATH_TO_FX%는 가가의 JavaFX 라이브러리의 경로입니다. 제 경우는

"--module-path C:\javafx-sdk-11.0.2\lib --add-modules=javafx.controls,javafx.fxml"

라고 입력했습니다. 인텔리제이로 아까 생성한 프로젝트는 FXML을 사용하므로, javafx.fxml과 javafx.controls가 필요합니다. 다른 것도 필요하면 여기에 추가해줘야 합니다.

 

 

여기까지 하고 Run을 실행하니 정말 거짓말처럼 작동이 되네요. 이게 되다니 신기하네요.

 

반응형
반응형

파일 다이얼로그 사용 예제입니다.

import java.awt.*;

class MyFrame extends Frame{
    private FileDialog fDialog = null;

    public MyFrame(String title){
        super(title);
        this.setSize(400,300);
        this.setVisible(true);
    }

    public void paint(Graphics g){
        super.paint(g);
        if(fDialog !=null) putMsg(g);
    }

    public void update(Graphics g){
        putMsg(g);
    }

    public void setDialog(FileDialog f){
        fDialog = f;
    }

    private void putMsg(Graphics g){
        g.drawString("Directory: " + fDialog.getDirectory(), 10, 50);
        g.drawString("File" + fDialog.getFile(),10, 100);
    }
}

public class awtex4 {
    public static void main(String args[]){
        MyFrame myFrame = new MyFrame("FileDialogTest");
        FileDialog f = new FileDialog(myFrame, "Open" , FileDialog.LOAD);

        f.setVisible(true);

        myFrame.setDialog(f);

        myFrame.repaint();
    }
}

file Dialog 실행 모습

 

파일 경로와 파일명이 표시된 화면

 

 

 

반응형
반응형
import java.awt.*;

public class awtex3 {
    public static void main(String args[]){
        Frame f = new Frame("Popup Menu");
        PopupMenu pm = new PopupMenu("Popup");

        pm.add(new MenuItem("MenuItem1"));

        Menu m = new Menu("SubMenu1");
        m.add(new MenuItem("SubMenuItem1"));
        pm.add(m);

        f.add(pm);
        f.setSize(300,200);
        f.setBackground(Color.white);
        f.setVisible(true);
        pm.show(f, 10, 100);

    }
}
반응형

'Programming > Java_Etc' 카테고리의 다른 글

JAVA - Intellij JavaFX 설치(Java 11 이후 버전용)  (4) 2020.02.20
AWT Study - FileDialog 사용하기  (2) 2020.02.11
AWT Study - 메뉴 생성  (0) 2020.02.11
AWT Study - Window & Frame  (0) 2020.02.11
Java 막대 그래프 그리기2  (0) 2020.02.08
반응형
import java.awt.*;

public class awtex2 {
    public static void main(String args[]){
        Frame f = new Frame("Pulldown Menu");
        MenuBar mb = new MenuBar();

        Menu m = new Menu("Menu1");
        m.add(new MenuItem("MenuItem1"));

        Menu sm = new Menu("SubMenu1");
        sm.add(new MenuItem("SubmenuItem1"));
        sm.add(new MenuItem("SubmenuItem2"));

        m.add(sm);
        m.add(new MenuItem("MenuItem2"));

        mb.add(m);

        f.setMenuBar(mb);
        f.setSize(200, 200);
        f.setBackground(Color.WHITE);
        f.setVisible(true);
    }
}
반응형

'Programming > Java_Etc' 카테고리의 다른 글

AWT Study - FileDialog 사용하기  (2) 2020.02.11
AWT Study - 팝업메뉴  (0) 2020.02.11
AWT Study - Window & Frame  (0) 2020.02.11
Java 막대 그래프 그리기2  (0) 2020.02.08
Database Connection - DBConnection.java  (0) 2020.01.29
반응형

AWT가 오래된 것인줄만 알았는데 우리 회사에서 아직도 쓰고 있습니다. 그런데 생각해보니까, 오래된 소스도 최신 컴퓨터에서도 잘 돌아가고, 별도 설치도 필요 없고, 호환 잘 되는게 좋은 것 같습니다. Visual Basic으로 짜여진 프로그램도 있는데, 유지보수가 너무 힘드네요...항상 가상XP를 깔고 배포도 엄청 복잡해요.

그래서 결론은 다시 AWT! 기초부터 차근차근 공부해 보도록 하겠습니다. 우선 Window와 Frame 만들기 예제

import java.awt.*;

public class awtex {
    public static void main(String args[]){
        Frame f = new Frame("Frame");
        f.setSize(500, 400);
        f.setBackground(Color.white);
        f.setVisible(true);

        Window w = new Window(f){
            public void paint (Graphics g){
                g.drawString("Window", 10, 50);
            }
        };
        Rectangle r = new Rectangle(50, 50, 100, 100);
        w.setBounds(r);
        w.setBackground(Color.yellow);
        w.setVisible(true);
        w.toFront();

    }
}

윈도우는 테두리와 메뉴바를 갖지 않는 그냥 컨테이너인데 반해 Frame은 테두리와 메뉴바를 가질 수 있으며, 

둘 다 BorderLayout을 사용하여 레이아웃을 설정합니다.

반응형

'Programming > Java_Etc' 카테고리의 다른 글

AWT Study - 팝업메뉴  (0) 2020.02.11
AWT Study - 메뉴 생성  (0) 2020.02.11
Java 막대 그래프 그리기2  (0) 2020.02.08
Database Connection - DBConnection.java  (0) 2020.01.29
Database Connection - OracleTest.java  (0) 2020.01.29
반응형

막대 그래프 그리는 코드로 이것 저것 고쳐가며 실습을 해본 기록을 남깁니다.

아직 이해가 덜된 부분도 있습니다. 아래 Listener부분... 계속 공부해야죠~

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

public class bargraph
{
    public static void main(String args[])
    {
        JFrame frame = new JFrame("Program Language School");
        frame.setLocation(500,200);
        frame.setPreferredSize(new Dimension(400,350));
        Container contentPane = frame.getContentPane();

        DrawingPanel drawingPanel = new DrawingPanel();
        contentPane.add(drawingPanel, BorderLayout.CENTER);
        //그래프를 그릴 패널

        JPanel controlPanel = new JPanel();
        JTextField text1 = new JTextField(3);
        JTextField text2 = new JTextField(3);
        JTextField text3 = new JTextField(3);
        JButton button = new JButton("Show");
        controlPanel.add(new JLabel("Java"));
        controlPanel.add(text1);
        controlPanel.add(new JLabel("Python"));
        controlPanel.add(text2);
        controlPanel.add(new JLabel("C#"));
        controlPanel.add(text3);
        controlPanel.add(button);
        contentPane.add(controlPanel, BorderLayout.SOUTH);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        button.addActionListener(new DrawActionListener(text1,text2,text3,drawingPanel));
        //"그래프 그리기" 버튼을 눌렀을때 작동 할 리스터등록
        frame.pack();
        frame.setVisible(true);
    }
}

//그래프를 그리는 패널 클래스
class DrawingPanel extends JPanel
{
    int score_java, score_python, score_cs;
    public void paint(Graphics g){
        g.clearRect(0,0,getWidth(),getHeight());
        g.drawLine(50,250,350,250);
        for(int cnt = 1 ;cnt<11;cnt++)
        {
            g.drawString(cnt *10 +"",25,255-20*cnt);
            g.drawLine(50, 250-20*cnt, 350,250-20*cnt);
        }
        g.drawLine(50,20,50,250);
        g.drawString("Java",100,270);
        g.drawString("Python",200,270);
        g.drawString("C#",300,270);
        g.setColor(Color.BLUE);
        if (score_java>0)
            g.fillRect(110,250-score_java*2,10,score_java*2);
        if(score_python>0)
            g.fillRect(210,250-score_python*2,10,score_python*2);
        if(score_cs>0)
            g.fillRect(310,250-score_cs*2,10,score_cs*2);
    }
    void setScores(int score_java, int score_python, int score_cs)
    {
        this.score_java=score_java;
        this.score_python=score_python;
        this.score_cs=score_cs;
    }
}

//버튼 눌렀을때 동작하는 리스너
class DrawActionListener implements ActionListener
{
    JTextField text1,text2,text3;
    DrawingPanel drawingPanel;
    DrawActionListener(JTextField text1, JTextField text2, JTextField text3, DrawingPanel drawingPanel)
    {
        this.text1=text1;
        this.text2=text2;
        this.text3=text3;
        this.drawingPanel = drawingPanel;
    }
    public void actionPerformed(ActionEvent e)
    {
        try
        {
            int korean = Integer.parseInt(text1.getText());
            int english = Integer.parseInt(text2.getText());
            int math = Integer.parseInt(text3.getText());
            drawingPanel.setScores(korean, english, math);
            drawingPanel.repaint();
        }
        catch (NumberFormatException nfe){
            JOptionPane.showMessageDialog(drawingPanel,"잘못된 숫자 입력입니다","에러메시지",JOptionPane.ERROR_MESSAGE);
        }
    }
}
반응형

'Programming > Java_Etc' 카테고리의 다른 글

AWT Study - 팝업메뉴  (0) 2020.02.11
AWT Study - 메뉴 생성  (0) 2020.02.11
AWT Study - Window & Frame  (0) 2020.02.11
Database Connection - DBConnection.java  (0) 2020.01.29
Database Connection - OracleTest.java  (0) 2020.01.29
반응형

자바로 데이터베이스 연결 프로그램 구현 시, DB연결부 구현파일입니다.

 

package DB;
import java.sql.*;

public class DBConnection
{
  public static Connection dbConn;
  public static Connection getConnection() 
  {
    Connection conn = null;
    try{
        String user="abcd";
        String pw="********";
        String url="jdbc:oracle:thin:@zxcv.dothome.co.kr:1521:odbc";
        //이렇게 해야 연결이 된다. C#과 차이
        Class.forName("oracle.jdbc.driver.OracleDriver");
        System.out.println("driver load success");
        conn=DriverManager.getConnection(url,user,pw);
        System.out.println("DBConnectsuccess");
    }catch(ClassNotFoundExceptioncnfe){
        System.out.println("DB드라이버로딩실패:"+cnfe.toString());
    }catch(SQLExceptionsqle){
        System.out.println("DB접속실패:"+sqle.toString());
    }catch(Exceptione){
        System.out.println("Unkonwn error");
        e.printStackTrace();
    }
    return conn;
  }
}

 

반응형

'Programming > Java_Etc' 카테고리의 다른 글

AWT Study - 팝업메뉴  (0) 2020.02.11
AWT Study - 메뉴 생성  (0) 2020.02.11
AWT Study - Window & Frame  (0) 2020.02.11
Java 막대 그래프 그리기2  (0) 2020.02.08
Database Connection - OracleTest.java  (0) 2020.01.29
반응형

1. DBConnection.java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
public class DBConnection 
{
    public static Connection dbConn;
    
    public static Connection getConnection()
    {
      Connection conn = null;
      try {
        String user = "scott"; 
        String pw = "tiger";
        String url = "jdbc:oracle:thin:@localhost:1521:orcl";

        Class.forName("oracle.jdbc.driver.OracleDriver");        
        conn = DriverManager.getConnection(url, user, pw);

        System.out.println("Database에 연결되었습니다.\n");

      } catch (ClassNotFoundException cnfe) {
          System.out.println("DB 드라이버 로딩 실패 :"+cnfe.toString());
      } catch (SQLException sqle) {
          System.out.println("DB 접속실패 : "+sqle.toString());
      } catch (Exception e) {
          System.out.println("Unkonwn error");
          e.printStackTrace();
      }
    return conn;     
    }
}

 

2. DB 데이터추출 구현부

package DB;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class OracleTest
{
    public static void main(String args[])
    {
        Connection conn = null; // DB연결된 상태(세션)을 담은 객체
        PreparedStatement pstm = null; // SQL 문을 나타내는 객체
        ResultSet rs = null; // 쿼리문을 날린것에 대한 반환값을 담을 객체
        
        try {
          // SQL 문장을 만들고 만약 문장이 질의어(SELECT문)라면
          // 그 결과를 담을 ResulSet 객체를 준비한 후 실행시킨다.
          String quary = "SELECT * FROM (select * from TEMP order by empno) where rownum<=10";
          //String quary = "SELECT * FROM (select * from TEMP order by EMP_#) fetch first 100 rows only";
          conn = DBConnection.getConnection();
          pstm = conn.prepareStatement(quary);
          rs = pstm.executeQuery();
          System.out.println("EMPNO EMP_X KoreanName HanmunName CommonNumber");
          System.out.println("============================================");

          while(rs.next()){
              String empno = rs.getString(1);
              int emp_x = rs.getInt(2);
              String Korean_name = rs.getString(3);
              String Han_name = rs.getString(4);
              int comm = rs.getInt("RES_#1");
              //java.sql.Date hiredate = rs.getDate(5); // Date 타입 처리
              String result = empno+" "+emp_x+" "+Korean_name+" "+Han_name+" "+comm;
              //                      직원번호       구분           한글이름             한문이름        주민번호
              System.out.println(result);
           }
           
        } catch (SQLException sqle) {
        	System.out.println("SELECT문에서 예외 발생");
        	sqle.printStackTrace();
            
        }finally{
        // DB 연결을 종료한다.
            try{
                if ( rs != null ){rs.close();}
                if ( pstm != null ){pstm.close();}
                if ( conn != null ){conn.close(); }
                
            }catch(Exception e){
            	throw new RuntimeException(e.getMessage());
            }
        }
    }
}

 

반응형

'Programming > Java_Etc' 카테고리의 다른 글

AWT Study - 팝업메뉴  (0) 2020.02.11
AWT Study - 메뉴 생성  (0) 2020.02.11
AWT Study - Window & Frame  (0) 2020.02.11
Java 막대 그래프 그리기2  (0) 2020.02.08
Database Connection - DBConnection.java  (0) 2020.01.29

+ Recent posts