단순한 숙제를하려고합니다. 문 개체가 열려 있는지 여부를 표시하는 텍스트 줄을 표시합니다. 그 밑에는 (drawRect를 사용하여) 시각적으로 표현합니다. 하단에는 문을 열거 나 닫을 수있는 두 개의 버튼이있어서 텍스트와 사각형을 변경합니다.BorderLayout을 사용하여 JFrame에 그래픽 추가하기
편집 : 컴파일 된 지금 제공 할 수있는 코드의 목록 :
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Test {
public static void main(String[] args) {
// Creates new JFrame called frame, with title "Door"
// (displayed at top of screen).
JFrame frame = new JFrame ("Door");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TempDoorPanel panel = new TempDoorPanel();
frame.add(panel);
frame.pack();
frame.setVisible(true);
}
}
class Door {
private String state;
private String message;
Door (String state) {
this.state = state;
message = "The door is currently closed.";
}
public boolean isOpen() {
return state.equals ("open");
}
public boolean isClosed() {
return state.equals ("closed");
}
public void setState(String state) {
this.state = state;
}
public String getMessage() {
return message;
}
public void open() {
if (state.equals("open")) {
message = "The door is already open.";
}
else {
state = "open";
message = "The door has been opened.";
}
}
public void drawOpenDoor (Graphics page) {
page.drawRect(100, 100, 100, 100);
}
}
class TempDoorPanel extends JPanel {
private Door door;
private JTextField currentStateOfDoor;
private JButton openDoor;
public TempDoorPanel() {
super.setLayout(new BorderLayout());
door = new Door("closed");
super.setBackground(Color.blue);
super.setPreferredSize(new Dimension (360, 400));
currentStateOfDoor = new JTextField(14);
currentStateOfDoor.setText(door.getMessage());
super.add(currentStateOfDoor, BorderLayout.NORTH);
openDoor = new JButton("Open Door");
class openDoorListener implements ActionListener {
public void actionPerformed (ActionEvent event) {
door.open();
repaintText();
}
}
openDoorListener openlistener = new openDoorListener();
openDoor.addActionListener(openlistener);
JPanel holder = new JPanel();
holder.add(openDoor);
super.add(holder, BorderLayout.SOUTH);
}
private void repaintText() {
currentStateOfDoor.setText(door.getMessage());
// These methods are from Door class.
}
public void paintComponent (Graphics page) {
super.paintComponent(page);
if (door.isOpen())
door.drawOpenDoor(page);
// isOpen is a boolean method from Door class.
}
}
작동 무엇 :
- 버튼이 BorderLayout.SOUTH, 다른 후 하나, 화면에 적절한 장소에 나타납니다.
- JTextField가 BorderLayout.NORTH
- 에 표시됩니다. 마지막으로 파란색 영역이 화면 중앙의 올바른 위치에 나타납니다.
것은 내가 해결하기 위해 노력하고있어 :
- 내가 얼마나 제대로 그 파란색 영역의 중앙에 사각형을 표시 할 생각이 없다. 사각형의 좌표와 크기를 변경해 보았습니다. 사각형의 크기와 크기는 전혀 변경되지 않았습니다. 나는 그것을 drawRect (100, 100, 100, 100)로 만들 수 있고 아무것도 변경하지 않는다.
- 사각형이 현재 JTextField의 왼쪽 위 모서리 뒤에 숨겨져 있지만 BorderLayout으로 이동하는 방법을 알 수 없다는 것도 알고 있습니다.
질문 :
- 가 어떻게 BorderLayout를의 사각형을 배치합니까?
- 레이아웃에서 drawrect()를 통해 그려지는 사각형의 크기를 어떻게 조정합니까?
이 [SSCCE]를 생성하십시오 (http://sscce.org) 하나의 사본을 필요로하고 우리는 가서 내가 간단하게 만들려면 새 프로젝트, 새로운 클래스와 새로운 주 등을 만들 필요가 이제 붙여 넣기하는 너와 같은 이름의 클래스를 만들고 코드를 복사하여 붙여 넣으십시오. 하지만 나도 게으름 뱅이 다 : P 또한 에러를 포함해서는 안된다. 즉, 'door.isOpen()'이 메소드를 포함하지 않았기 때문에 에러를 내고있다. –
팁을 주셔서 감사합니다. –
사각형은 JTextField에 의해 덮여 있기 때문에 다음과 같이 시도하십시오 :'page.drawRect (100, 100, 10, 10);' –