2013-10-24 2 views
0

어제 Java 프로그래밍을 시작했고 이것을 개발했습니다. 버튼 크기가 조정되지 않기 때문에 문제가 발생했습니다. 가능한 경우 사전에 감사드립니다.자바 jframe의 버튼의 크기가 조정되지 않습니까?

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 

class BgPanel extends JPanel { 
Image bg = new ImageIcon("C:\\Users\\********\\Pictures\\tiger.jpg").getImage(); 
@Override 
public void paintComponent(Graphics g) { 
    g.drawImage(bg, 0, 0, getWidth(), getHeight(), this); 
    } 
} 

public class FrameTestBase extends JFrame { 
public static void main(String args[]) { 
    JPanel bgPanel = new BgPanel(); 
    bgPanel.setLayout(new BorderLayout()); 

    final FrameTestBase t = new FrameTestBase(); 
    ImageIcon img = new ImageIcon("C:\\Users\\********\\Pictures\\gear-icon.png"); 
    t.setLayout(null); 
    t.setIconImage(img.getImage()); 
    t.setTitle("Login"); 
    t.setSize(600,600); 
    t.setLocationRelativeTo(null); 
    t.setContentPane(bgPanel); 
    t.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    t.setVisible(true); 

    JButton registerButton = new JButton("register"); 
    registerButton.setBounds(80, 80, 80, 80); 
    t.add(registerButton); 
     } 
    } 
+1

당신은't.setVisisble (참)'로 매우 마지막 일을해야한다. 프레임이 보이면 GUI의 크기/위치/레이아웃을 변경하는 것이 더 까다로워지기 때문입니다. –

답변

2

가 나는 문제에 실행했다. 최대한 도와 주실 수 있다면 사전에 도와주세요.

bgPanel.setLayout(new BorderLayout()); 
// --------- your other code 
t.setLayout(null); 
//--------------- your other code 
t.setContentPane(bgPanel); // you are setting bgPanel which has BorderLayout 
JButton registerButton = new JButton("register"); 
registerButton.setBounds(80, 80, 80, 80); 
t.add(registerButton); // t is the JFrame, your main window 

모든 JFrame.add(component)는 기본적으로 JFrame의 내용 창에 구성 요소를 추가합니다. null에 레이아웃을 설정 한 후에는 레이아웃 매니저로서가 BorderLayout이있는 JFrame의,에 bgPanel 같은 내용 창을 추가했습니다. 컨텐츠 창 즉에 버튼을 추가, bgPanelregisterButtonBorderLayout.Center 제약 조건을 추가합니다. 이것이이 버튼이 화면 크기로 확대되는 이유입니다.

// registerButton.setBounds(80, 80, 80, 80); comment out this line 
    registerButton.setPreferedSize(new Dimension(80, 80)); 
    t.add(registerButton, BorderLayout.PAGE_START) 

을 이제 NULL 레이아웃 사용 정보 : 다음과 같은 출력 할보고 너무 열망으로

이유를 찾기 위해 자신의 예에서 당신이 잃어버린

을 왜 버튼이 창 크기로 확장 중입니다. 가까운 장래에 구성 요소 중 하나에 머리가 있지만 창 테두리 밖으로 이동하여 꼬리를 잃어버린 것을 볼 수 있습니다. 당신은 당신의 구성 요소 중 하나가 아무런 이유없이 다른 구성 요소를 뛰어 넘을 것입니다. 다른 구성 요소와 관련하여 구성 요소의 위치가 변경되었지만 다른 구성 요소와의 관계가 변경됩니다. 그럼 당신은 문제가 시간의 손실 낭비 xxxSize, setLocation, setBounds 등하지만 ....

명 돈에 부자가 될 수 있습니다, 그들은 시간에 부자가 될 수 없습니다를 설정하여 고칠 찾을 수있을 것입니다.

시작 학습의 LayoutManager는 : Lesson: Laying Out Components Within a Container

+0

고마워, 나는 이것이 잘못된 길인지 깨닫고 모든 조언을 따라 새로운 스크립트를 시작했다. – DIOS

+0

@DIOS : 이미 레이아웃 관리자 사용에 대한 링크가 제공되었습니다. 실제로 그것들을 읽을 때인 것처럼 보입니다. 세이지의 대답은 1+입니다. –

1

setBounds 대신 registerButton.setSize(new Dimension(width, height))을 사용해보십시오. 는 새 값

에 대한 widthheight을 대체 할 기억 그리고 나는 똑같은 사람이 당신을 말하고있다라고하는 것을 잊지 :

은 널 (null) 레이아웃을 사용하지 마십시오.

빨리 당신은 더 배웁니다.
레이아웃이 어렵지는 않지만 실제로 쉽습니다.

+0

나는 이것을 시도했지만 여전히 화면의 크기로 확장됩니다. – DIOS

1

는 널 (null) 레이아웃을 사용하지 마십시오!

스윙이 레이아웃 매니저와 함께 사용하도록 설계되었습니다. 마이크의 제안을 따르는 것을 잊지 마십시오. 버튼의 크기를 조정하지 않으므로

+0

감사합니다.나는 나의 코드를 다시 발명함으로써 이것을 해결했다. 나는 코디네이트를 추가함으로써 널 레이아웃을 사용할 수있다. – DIOS

+0

@DIOS, 솔루션을 듣지 않을 때 왜 질문을 하시겠습니까? null 레이아웃을 사용하는 것은 여기에 나열해야 할 여러 가지 이유로 잘못된 접근 방식입니다. – camickr

+0

나는 사람들의 말에 귀 기울이고주의를 기울이고,이 스크립트를 긁어 내고 조언으로 인해 cardlayout을 사용하여 새 스크립트를 시작했습니다. – DIOS

관련 문제