2013-05-17 2 views
0

제목이 약간 혼란 스럽습니다. 그래서 설명하겠습니다. 내가 뭘하고 싶은건 내 최고의 응용 프로그램에서 상단의 중심에 고정되어있는 배경 이미지입니다 (x 축 중심, y 축 상단에서 오른쪽). 그리고 JFrame의 크기가 바뀌더라도 이걸 원합니다. 그러나 그 이미지 밑에 나는 창 크기에 맞게 반복되는 패턴을 원합니다.하나의 JFrame에 여러 유형의 배경 추가하기

나는 논리적 솔루션을 제시하기 위해 이것을 수행하는 몇 가지 방법을 생각했다. (이미 답변 된 StackOverflow 질문을 사용했다.) (나는 그것이 실제로 작동하지 않기 때문에 논리적이라고한다.)

내가 이것을 사용합니다 - Center a JPanel in a JFrame

나는이 함께이 문제 -이에서 솔루션을 기반으로한다

JPanel panel = new JPanel(); 
    panel.getContentPane(backgroundImage); 
    panel.setSize(400, 400); // JFrame arbitrary size. 
    panel.getContentPane().setLayout(null); 
    panel.setVisible(true); 

    int panelX = (panel.getWidth() - panel.getWidth() - panel.getInsets().left - panel.getInsets().right)/2; 
    panel.setLocation(panelX, 0); 

코드를 사용하면 getContentPane();을 사용하려고하면 오류가 발생합니다. 는 (이 오류는 "방법 getContentPane()는 유형 JPanel의에 대한 정의되지"입니다.)

그리고 JPanel의 아래에, 나는 다음과 같은 코드의 또 다른 JPanel의 것 -

BufferedImage titledImageFile = ImageIO.read(new File(IMAGE_PATH_TILED)); 
TiledImage test = new TiledImage(tiledImageFile); 

public void paintComponent(Graphics g) { 
int width = getWidth(); 
int height = getHeight(); 
int imageW = tileImage.getWidth(this); 
int imageH = tileImage.getHeight(this); 

// Tile the image to fill our area. 
for (int x = 0; x < width; x += imageW) { 
    for (int y = 0; y < height; y += imageH) { 
     g.drawImage(tileImage, x, y, this); 
    } 
} 
} 

희망이 내 질문입니다 명확한; 나는 이것을 올바른 방향으로 가고 있습니까, 아니면 제가해야 할 일이 있습니까? 또한 JFrame을 어떻게 작동시킬 수 있습니까?

마지막으로,이 질문에 대한 답변을 남겨두면 설명을 남겨 두어 나중에 문제가 발생하지 않도록 수정/예방할 수 있습니다.

+2

1) * "JFrame에서 JPanel의 중심에 위치"* 1 Q & A를 검토하고'null '레이아웃을 사용하는 것에 근거하여 대답을 내려 봤습니다. 구성 요소를 가운데에 배치하는 가장 좋은 방법은 [이 대답] (http://stackoverflow.com/a/7181197/418556)을 참조하십시오. 2) 더 나은 도움을 위해 [SSCCE] (http://sscce.org/)를 게시하십시오 (예 : 링크 된 예). –

+0

1). 이를 위해 무엇을 의미하는지 이해하고 BorderLayout 메서드를 사용합니다. 2). 자체 포함 된 예제를 얻으려고하면 프로젝트를 설정하는 방법이 지옥 같을 것입니다 ... 바라건대 다른 요구 사항을 충족합니다. 지금까지 도와 줘서 고마워! – Hathor

답변

1

당신은 당신에게 TitledPane을 추가합니다 BorderLayout를 사용하여 JFrame 서로

시작의 상단에 내장 된 각 패널의 최대 필요합니다. 이렇게하면 제목이있는 창이 프레임의 전체 공간을 차지할 수 있습니다.

TitledPane의 레이아웃을 GridBagLayout으로 설정하십시오. 다음과 같은 제약을 사용하여, 또한, 그 아이콘 재산 이미지로 설정되어있는 JLabel, ...

GridBagConstraints gbc = new GridBagConstraints(); 
gbc.weightx = 1; 
gbc.weighty = 1; 
gbc.anchor = GridBagConstraints.NORTH; 

그것은 것을 추가 별도의 BufferedImage에 타이틀의 결과를 캐시하는 경우 빠릅니다. 패널이 invalidated 일 때마다 업데이트해야하지만 더 빨리 다시 칠할 수 있습니다. ...

+0

도움을 주셔서 감사합니다! 내가 가지고있는 문제는 이미 내 JFrame (이미지) BoderLayout에 대해 NORTH로 설정된 개체가 있고 모든 정보가 BorderLayout의 가운데에 있다는 것입니다. 어떻게 당신이 설명하는 것을 사용하면이 모든 것을 엉망으로 만들지 않고 모든 데이터를 페이지의 가장 중요한 부분으로 밀어 넣을 수 있습니까? – Hathor

+0

따라서 CENTER 위치에 다른 패널을 추가하여 설명 된대로 대신 나머지 부분을 추가하십시오. – MadProgrammer

관련 문제