linux를 처음 알고 시작했을 당시만해도 xmms라는 콘솔에서 실행하는 프로그램을 설치하고 음악을 듣곤 했었는데, 거기서부터 파생된 gui형태의 프로그램들이 많이 나온것 같습니다. xmms2도 있었고, audacious라는 프로그램을 최근까지도 메인으로 사용하고 있었는데, 얼마전 qmmp라는 또다른 프로그램을 알게 되었습니다. 이름에서 알 수 있듯이 QT기반의 프로그램 이라고 합니다. 어떤 녀석인지 한 번 설치해 보도록 하겠습니다.
현재 제 데스크탑에는 ubuntu 20.04 lts가 설치되어 있습니다. 그래서 ubuntu package manager로 가서 qmmp를 찾아봅니다. 2개가 나오는데 어떤걸까요? 아래쪽이 1.5 버전이라고 되어있어서 아래쪽 프로그램을 설치하겠습니다.
설치하고 나니 보이긴 하는데, 아이콘이 안나오네요...ㅠㅠ
프로그램 실행은 문제가 없어 보입니다.
아이콘이 안나오는게 찜찜하네요. 아까 설치하지 않은 1.3버전을 설치해보도록 하겠습니다. 혹시 모르니 qmmp 사이트에서 repository를 추가한 후 업데이트를 합니다.
참고로 기존에 library 추가 명령은 compile, runtime, testCompile, testRuntime 이었으나, Gradle 4.10 (2018.8.27) 이래로deprecate 되었습니다.그리고 Gradle 7.0 (2021.4.9) 부터 삭제되었습니다.삭제된 네 명령은 각각 implementation, runtimeOnly, testImplementation, testRuntimeOnly 으로 대체되었습니다. 아래와 같은 오류가 발생했다면 명령어를 다시 확인해봐야합니다.
Could not find method compile() for arguments [org.springframework:spring-context:5.0.2.RELEASE] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
package application;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.text.Text;
public class Controller {
private String operator = "";
private int x = 0; // 기존의 숫자
private Model model = new Model();
@FXML
private Text result;
@FXML
private void operand(ActionEvent event) {
result.setText(result.getText() + ((Button) event.getSource()).getText());
}
@FXML
private void operator(ActionEvent event) {
if(((Button) event.getSource()).getText().equals("=")) {
result.setText(model.calculator(operator, x, Integer.parseInt(result.getText())) + "");;
} else {
operator = ((Button) event.getSource()).getText();
x = Integer.parseInt(result.getText());
result.setText("");
}
}
}
4. Model.java
package application;
public class Model {
public int calculator(String operator, int x, int y ) {
if(operator.contentEquals("+")) {
return x+y;
}
else if(operator.contentEquals("-")) {
return x-y;
}
else if(operator.contentEquals("*")) {
return x*y;
}
else {
return x / y;
}
}
}
인텔리제이에서 씬 빌더를 사용? 찾는 방법에 대해 적어놓습니다. 오랜만에 하려니 저도 어디있는지 까먹어서 많이 헷갈리네요...
처음 인텔리제이에서 javafx 프로젝트를 하나 생성하면 sample.fxml이라는 파일이 생성됩니다. fxml은 xml을 이용해 GUI를 쉽게 구현할 수 있게 해주는 언어인데요. 텍스트 탭과 scene builder 탭을 둘 다 볼 수 있습니다. 문제는 탭이 화면 아래쪽에 있는 것인데요....(아래 그림 참조)
이것때문에 괜히 파일명 우클릭해서 한참 찾았네요. 찾느라 고생 없으시길...
참고로, 처음 실행할 때 에러메시지와 함께 scene builder 다운로드가 아직 안됐다는 에러가 뜨는데... 해당 경고 따라 다운받아주시면 알아서 설치되고, 곧바로 보여집니다.
scene builder가 보이는건 알겠고.... 헬로월드 한번 만들어보겠습니다.
간단히 Container-pane 하나 바탕에 마련해두고, Controls-Button 드래그-드랍으로 얹어 놓은 후에, 텍스트만 Hello로 바꿨습니다. 잘 뜨겠죠?
네, 잘 뜹니다. ㅋㅋㅋ.
조금 더 진행해보겠습니다. Hello Button 위쪽에 TextField를 갖다 놓습니다. 아직까지 ID 는 모두 지정하지 않은 상태입니다.
그리고 이번엔 scenebuilder 화면으로 와서 할 작업이 있습니다. (참고로 저는 Intellij 내부 scene builder에서 아래 메뉴가 안보여서 별도로 설치한 Scene Builder를 통해서 열어 작업했습니다. sample.fxml 우클릭 후 open in scenebuilder)
1. 아래 화면 왼쪽의 Controller탭에서 Controller class를 방금 반들어준 sample.Controller가 되도록 선택해줍니다.
2. Button을 클릭한 상태로 우측 Code탭을 보시면 Identity 부분에서 ID를 골라줍니다. ID는 소스에서 작성한 변수명이 되겠습니다. txtMsg와 btnAlert 두가지가 보일텐데, 버튼에는 btnAlert, 텍스트필드에는 txtMsg를 각각 선택해줍니다.
3. Button의 On Action필드에는 코드에서 작성한 clickHandler를 선택해줍니다.