如何解决这个文件的问题是每次我在 (JTextField)
这个文件的问题是每次我在 (JTextField) 中输入文本时屏幕都会下降。
首先,不会出现运行时编译错误。
-
我们在登录类的 (JFrame) 内创建了 (JPanel)。 (MyCanvas) 类对象被放置在面板内。
-
它在屏幕上运行没有任何问题。 在 (JTextField) 中输入一个字符,屏幕就会下降。
所以,我发现的是 (MyCanvas) 类...
添加(mc);在 MyCanvasmc = new MyCanvas();
我应该怎么做才能解决这个问题?
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.jpasswordfield;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;
public class AirlineLogin extends JFrame implements ActionListener{
Font titleFnt = new Font("휴먼편지체",Font.BOLD,32);
Font fnt = new Font("휴면편지체",14);
JPanel mainPane = new JPanel();
JPanel loginPane = new JPanel();
JPanel topPane = new JPanel();
JLabel loginTitle = new JLabel("비트항공 여행 일정 예약 프로그램");
JPanel centerPane = new JPanel();
//이미지
ImageIcon icon = new ImageIcon("img/flights.png");
Image im = icon.getimage();
Image im2 = im.getScaledInstance(300,300,Image.SCALE_DEFAULT);
ImageIcon icon2 = new ImageIcon(im2);
JLabel lbl = new JLabel(icon2);
JPanel southPane = new JPanel();
JPanel southCenterPane = new JPanel();
JPanel idPane = new JPanel();
JLabel idLbl = new JLabel("USERNAME");
JTextField idField = new JTextField(20);
JPanel pwdPane = new JPanel();
JLabel pwdLbl = new JLabel("PASSWORD");
jpasswordfield pwdField = new jpasswordfield(20);
JPanel btnPane = new JPanel();
RoundedButton joinBtn = new RoundedButton("회원가입");
RoundedButton loginBtn = new RoundedButton("로그인");
JPanel mainSouthPane = new JPanel();
AirlineMain main = new AirlineMain();
AirplaneMoving move = new AirplaneMoving();
public AirlineLogin() {
//////////////////////////레이아웃////////////////////////
add(mainPane);
// 메인 패널 레이아웃 그리드백레이아웃
mainPane.setLayout(new GridBagLayout());
//그리드백 제약사항을 정의
GridBagConstraints gbc = new GridBagConstraints();
// 전체를 그리드백레이웃으로 채운다
gbc.fill = GridBagConstraints.BOTH;
// 여백
gbc.weightx=1.0;
gbc.weighty=2.0;
gbc.gridx=0;
gbc.gridy=0;
mainPane.add(move,gbc);
// grid top
gbc.weightx=1.0;
gbc.weighty=1.0;
gbc.gridx=0;
gbc.gridy=1;
mainPane.add(loginPane,gbc);
loginPane.setLayout(new BorderLayout());
loginPane.add(loginTitle);
// 제목 폰트 설정
loginTitle.setFont(titleFnt);
loginTitle.setHorizontalAlignment(JLabel.CENTER);
loginTitle.setVerticalAlignment(JLabel.BottOM);
loginPane.setBackground(Color.white);
// grid center
gbc.weightx=1.0;
gbc.weighty=2.0;
gbc.gridx=0;
gbc.gridy=2;
mainPane.add(centerPane,gbc);
centerPane.setLayout(new BorderLayout());
centerPane.add(lbl);
centerPane.setBackground(Color.white);
//grid south
gbc.weightx=1.0;
gbc.weighty=1.0;
gbc.gridx=0;
gbc.gridy=3;
mainPane.add(southPane,gbc);
southCenterPane.setLayout(new GridLayout(3,1));
// 아이디 패널
southCenterPane.add(idPane);
idPane.add(idLbl);
idPane.add(idField);
idPane.setFont(fnt);
idPane.setBackground(Color.white);
//패스워드 패널
southCenterPane.add(pwdPane);
pwdPane.add(pwdLbl);
pwdPane.add(pwdField);
pwdPane.setFont(fnt);
pwdPane.setBackground(Color.white);
// 회원가입 로그인 버튼 패널
southCenterPane.add(btnPane);
btnPane.add(joinBtn);
btnPane.add(loginBtn);
btnPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
btnPane.setBackground(Color.white);
southPane.add(southCenterPane);
southPane.setBackground(Color.white);
southCenterPane.setBackground(Color.white);
//borderLayout south 세계시간
add("South",mainSouthPane);
mainSouthPane.setLayout(new FlowLayout(FlowLayout.LEFT));
mainSouthPane.add(new JLabel("[ 한국 : "));
mainSouthPane.add(main.koreaClock);
mainSouthPane.add(new JLabel("],["));
mainSouthPane.add(new JLabel("뉴욕 : "));
mainSouthPane.add(main.newYorkClock);
mainSouthPane.setBorder(new LineBorder(Color.black,1));
mainSouthPane.add(new JLabel("]"));
/////////////////////////////레이아웃 끝 ///////////////////////////////////
// 전체화면
setExtendedState(MAXIMIZED_BOTH);
// 전체화면 풀릴경우 기본화면 크기
setSize(1000,800);
// 화면 보이기 여부
setVisible(true);
// 자원해제,끄기
setDefaultCloSEOperation(disPOSE_ON_CLOSE);
setDefaultCloSEOperation(EXIT_ON_CLOSE);
// 타이틀
setTitle("비트항공");
setIconImage(im);
// 이벤트
joinBtn.addActionListener(this);
loginBtn.addActionListener(this);
// 키 이벤트 (로그인)
pwdField.addKeyListener(new KeyAdapter() {
public void keyreleased(KeyEvent e) {
int key = e.getKeyCode();
if(key==KeyEvent.VK_ENTER) {
getLoginData();
}
}
});
//////////////무브 클래스 사이즈와 바정의////////
move.setBackground(Color.white);
move.getFrameSize();
Thread t1 = new Thread(move);
t1.start();
/////////////////////////////////
}
public void actionPerformed(ActionEvent ae) {
Object eventBtn = ae.getSource();
if(eventBtn==joinBtn) {
} else if(eventBtn==loginBtn) {
getLoginData();
}
}
public void getLoginData() {
String id = idField.getText();
String pwd = pwdField.getText();
if(id.equals("")) {
JOptionPane.showMessageDialog(this,"아이디를 입력하셔야 합니다");
} else if(pwd.equals("")) {
JOptionPane.showMessageDialog(this,"비밀번호를 입력하셔야 합니다.");
} else {
LoginDAO dao = new LoginDAO();
int loginCheck = dao.getLogin(id,pwd);
if(loginCheck == 0) JOptionPane.showMessageDialog(this,"아이디 또는 비밀번호가 틀렸습니다.");
else if(loginCheck ==1 ) JOptionPane.showMessageDialog(this,"로그인에 성공하였습니다");
}
}
}
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.Random;
import javax.swing.JPanel;
public class AirplaneMoving extends JPanel implements Runnable{
MyCanvas mc;
Image airplane,cloud1,cloud2;
int airplaneX,airplaneY;
int change = 0;
Random ran = new Random();
int[][] r = new int[20][20];
Dimension frameSize,fullSize;
public AirplaneMoving() {
airplane = Toolkit.getDefaultToolkit().getimage("img/airplane.png");
cloud1 = Toolkit.getDefaultToolkit().getimage("img/cloud1.png");
cloud2 = Toolkit.getDefaultToolkit().getimage("img/cloud2.png");
mc = new MyCanvas();
////////////////////////////////
setLayout(new BorderLayout());
setBackground(Color.white);
add(mc);
mc.setFocusable(true);
}
// 스레드 런 메소드
public void run() {
while(true) {
airplaneX-=5;
if(airplaneX==-100) airplaneX = ( (int)fullSize.getWidth()/10 )*10;
mc.repaint();
try {Thread.sleep(300);}catch(Exception e) {e.printstacktrace();}
}
}
///////////////// 캔버스///////////////
class MyCanvas extends Canvas{
public void paint(Graphics g) {
g.drawImage(airplane,airplaneX,airplaneY,100,this);
for(int i=0; i<r.length;i++) {
if(i<(r.length/2)) g.drawImage(cloud1,r[i][0],r[i][1],30,this);
else if(i>=(r.length/2)) g.drawImage(cloud2,this);
}
}
}
////////////////// 프레임 사이즈 구하기///////////////
public void getFrameSize() {
frameSize = getSize();
fullSize = Toolkit.getDefaultToolkit().getScreenSize();
airplanesize();
cloudSize();
}
//// 항공기 사이즈////////
public void airplanesize() {
airplaneX = ( (int)fullSize.getWidth()/10 )*10;
airplaneY = (( (int)frameSize.getHeight()/2 - 15) /10 ) *10;
}
///////// 구름 사이즈//////////
public void cloudSize(){
for(int i =0; i<r.length;i++) {
r[i][0] = ran.nextInt(((int)fullSize.getWidth()/10)*10);
r[i][1] = ran.nextInt(((int)frameSize.getHeight()/10)*10);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。