2014-07-20 5 views
-2

안녕하세요 저는 제 자신의 계산기를 만들려고 노력하고 있는데 그래픽 부분에 문제가 있습니다 ... 레이블과 버튼을 만들고 레이블에 설정합니다. 그들은 나타나지만 문제가 무엇인지 그들의 위치를 ​​설정할 수 없습니까 ?? 도움을 감사이 jframe 코드의 오류는 무엇입니까

import java.awt.Color; 
import java.awt.Dimension; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class calc extends JFrame { 

    public calc(String string) { 

     this.setResizable(true); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.setTitle("calculator"); 
     this.setPreferredSize(new Dimension(300, 400)); 

     JButton button1 = new JButton("calculate"); 
     button1.setBackground(Color.cyan); 
     button1.setLocation(200, 100); 
     button1.setPreferredSize(new Dimension(100, 20)); 

     JLabel label1 = new JLabel(); 
     label1.setText(main.main.text); // main.main.text is a text in main class it works XD 

     JPanel panel1 = new JPanel(); 
     panel1.add(label1); 
     panel1.add(button1); 
     panel1.setPreferredSize(new Dimension(300, 400)); 
     this.getContentPane().add(panel1); 

     this.pack(); 
     panel1.setVisible(true); 
     button1.setVisible(true); 
     label1.setVisible(true); 

    } 
} 
+1

여기서 'main.main.text'는 무엇입니까? 코드도 공유 할 수 있습니다. 적절한 getter 메소드를 사용하여 액세스하십시오. – Braj

+2

기본적으로 FlowLayout을 사용하는 JPanel에 추가 된 구성 요소의 절대 위치를 설정하려고 시도하고 있으며 FlowLayouts는 절대 위치를 고려하지 않습니다. Null 레이아웃은 그렇지만 대부분의 다른 플랫폼이나 화면 해상도에서보기 좋게 보이고 업데이트 및 유지 관리가 매우 어렵지만 매우 유연하지 않은 GUI를 위해 null 레이아웃을 사용하지 않아야합니다. 더 나은 솔루션 : 달성하려는 목표에 대한 그림을 보여 주거나 GUI 레이아웃을보다 자세히 설명하면 문제를 해결하는 데 도움이 될 것입니다. –

+0

스윙 GUI는 글꼴 크기에 대한 기본 설정이 다른 여러 화면 크기와 해상도에서 다른 PLAF를 사용하여 다른 플랫폼에서 작동해야 할 수 있습니다. 따라서 구성 요소의 정확한 배치에 도움이되지 않습니다. 대신 레이아웃 관리자 또는 [레이아웃 관리자 조합] (http://stackoverflow.com/a/5630271/418556) 및 [레이아웃 패딩 및 테두리] (http://stackoverflow.com/q/17874717/418556)을 사용하십시오.). –

답변

-1

스윙은 layout managers와 GUI의 레이아웃을 관리하기 때문에 객체의 위치를 ​​설정하지 않습니다. 당신이 정말로 당신이 자신을 레이아웃을 설정하려면 (클래스가 이미 JFrame를 확장하기 때문에 getContentPane().setLayout(null) 또는 귀하의 경우) 당신은

그런 다음 당신은 setSizesetLocation 방법을 사용할 수 있습니다 frame.getContentPane().setLayout(null);를 사용할 수 있습니다. 그러나 이것은 입니다. 아이디어입니다. Java 설명서에서 null layoutManager에 대해 말하는 내용은 다음과 같습니다.

레이아웃 관리자를 사용하는 것이 좋지만 레이아웃없이 레이아웃을 수행 할 수 있습니다. 컨테이너의 레이아웃 속성을 null로 설정하면 컨테이너에 레이아웃 관리자가 사용되지 않습니다. 이 전략 (절대 위치 지정)에서는 해당 컨테이너 내의 모든 구성 요소의 크기와 위치를 지정해야합니다. 절대 위치 지정의 한 가지 단점은 최상위 컨테이너의 크기를 조정할 때 을 잘 조정하지 않는다는 것입니다. 또한 다른 글꼴 크기 및 로케일과 같이 사용자와 시스템 간의 차이점에도 잘 맞지 않습니다.

+0

'null'레이아웃을 언급하는 것이 비생산적인 의견이라고 생각합니다. 전문가 만이 자신의 로직을 사용하여 컨테이너를 레이아웃해야하며 사용자 정의 레이아웃 관리자에 캡슐화해야합니다. 사람이 GUI를 배치 할 충분한 경험을 갖게 될 때쯤에는 이미 '널 (null)'레이아웃에 대해 들어봤을 것입니다. –

+0

나는 질문에 대답하는 정보를 제공하고 있는데, op는 정확히 구성 요소를 배치하는 방법을 물었습니다. 그 대답은 잘못된 생각이고 LayoutManagers를 사용해야한다는 것입니다. – Zach

관련 문제