2013-10-13 3 views
0

안녕하세요. 좋은 사람들 StackOverflow. 내가 고칠 수없는 문제가 생겼다. 시작하기 전에 나는 초심자가 아니지만 믿을 수 없을 정도로 발전하지는 않았 음을 경고해야합니다. 그렇다면 답을 적절하게 말하면 좋을 것입니다.JTextField의 크기를 변경하십시오.

나는 JTextFields의 크기를 제어 할 수 있으며, 내가 아는 모든 방법을 사용했습니다. 여기 코드는 다음과 같습니다

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.GridLayout; 

import javax.swing.BorderFactory; 
import javax.swing.Box; 
import javax.swing.BoxLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JRadioButton; 
import javax.swing.JTextField; 

public class ShapeCalculatorView extends JFrame { 

public static void main(String[] args) { 

} 

public ShapeCalculatorView() { 
    init(); 
} 

public void init() { 
    setVisible(true); 
    setTitle("Shape Calculator"); 
    setSize(500, 500); 
    // 
    GridLayout bodyLayout = new GridLayout(1, 2); 
    GridLayout answerLayout = new GridLayout(2, 2); 

    JPanel mainPanel = new JPanel(); 
    mainPanel.setLayout(new BorderLayout()); 
    mainPanel.setBorder(BorderFactory.createLineBorder(Color.red)); 
    // 
    JPanel bodyPanel = new JPanel(); 
    bodyPanel.setLayout(bodyLayout); 
    bodyPanel.setBorder(BorderFactory.createLineBorder(Color.blue)); 
    mainPanel.add(bodyPanel, BorderLayout.PAGE_START); 

    JPanel resultPanel = new JPanel(); 
    resultPanel.setLayout(bodyLayout); 
    mainPanel.add(resultPanel, BorderLayout.PAGE_END); 

    JPanel buttonPanel = new JPanel(); 
    buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS)); 
    bodyPanel.add(buttonPanel); 
    JRadioButton buttonOne = new JRadioButton("Button 1"); 
    JRadioButton buttonTwo = new JRadioButton("Button 2"); 
    JRadioButton buttonThree = new JRadioButton("Button 3"); 
    JRadioButton buttonFour = new JRadioButton("Button 4"); 
    JRadioButton buttonFive = new JRadioButton("Button 5"); 
    buttonPanel.add(buttonOne); 
    buttonPanel.add(buttonTwo); 
    buttonPanel.add(buttonThree); 
    buttonPanel.add(buttonFour); 
    buttonPanel.add(buttonFive); 

    String textLength = "Length: "; 
    String textWidth = "Width: "; 

    JPanel inputPanel = new JPanel(); 
    inputPanel.setLayout(answerLayout); 
    bodyPanel.add(inputPanel); 
    JTextField fieldOne = new JTextField(); 
    JTextField fieldTwo = new JTextField(); 
    fieldOne.setPreferredSize(new Dimension(100, 2)); 
    inputPanel.add(new JLabel(textLength)); 
    inputPanel.add(fieldOne); 
    inputPanel.add(new JLabel(textWidth)); 
    inputPanel.add(fieldTwo); 

    JPanel calcPanel = new JPanel(); 
    resultPanel.add(calcPanel); 
    JButton calcButton = new JButton("CALCULATE"); 
    calcPanel.add(calcButton); 

    JPanel answerPanel = new JPanel(); 
    answerPanel.setLayout(answerLayout); 
    resultPanel.add(answerPanel); 
    answerPanel.add(new JLabel("Perimeter: ")); 
    answerPanel.add(new JLabel("Area: ")); 
    long perimeter = 5; 
    long area; 

    add(mainPanel); 
    pack(); 
} 

} 
public class ShapeCalculatorApp { 

public static void main(String[] args) { 
    ShapeCalculatorView view = new ShapeCalculatorView(); 

} 

} 

당신이 모든 텍스트 필드가 꽤 높은 것을 제외하고 좋은 것을 볼 것이며, 내가 그들을 조금 작게하고 싶은이 실행한다면. 이미 setPreferredSize를 시도했지만 작동하지 않았다. GridLayout을 사용하고 있기 때문에 두 개의 텍스트 필드가 모든 공간을 사용하므로 setPreferredSize가 작동하지 않을 수있다. 또한 행의 수를 3으로 설정 한 다음 두 번째 행에서 빈 JLabel을 2 개만 넣을 수 있다고 생각했지만이 방법을 사용하면 원시를 처리하는 방법이 약간 생깁니다. 이 작업을 효율적으로 처리 할 수 ​​있습니까?

편집 :이 중요한 경우에, 나는 setPreferredSize와 텍스트 필드의 폭, 그냥 높이를 제어 할 수 있어요. 이 셀을 채우기 위해 스트레칭 구성 요소를 강제로

답변

2

직접 GridLayout과에 JTextField를 추가하지 마십시오. 대신 JPanel에 넣거나 중첩 된 레이아웃을 사용하여 GUI를 구현하십시오. 예를 들어

(끔찍한 예,하지만 당신의 코드를 사용하여 하나의) : 나는이 대답을 좋아하지 않지만, 내가 같은 문제로 실수를 한단다 사람을 위해 여기에 넣어한다고 생각

final JTextField fieldOne = new JTextField(10); 
    final JTextField fieldTwo = new JTextField(10); 
    // fieldOne.setPreferredSize(new Dimension(100, 2)); 
    inputPanel.add(new JLabel(textLength)); 
    inputPanel.add(new JPanel() { 
    { 
     add(fieldOne); 
     setBorder(BorderFactory.createTitledBorder("Field 1")); 
    } 
    }); 
    inputPanel.add(new JLabel(textWidth)); 
    inputPanel.add(new JPanel() { 
    { 
     add(fieldTwo); 
     setBorder(BorderFactory.createTitledBorder("Field 2")); 
    } 
    }); 
+0

그냥 그렇게 분명히 당신은 내가 setPreferredSize와 크기를 변경할 수있을 것입니다 내가했다 경우 인 JPanel에 JLabel의에 텍스트 필드를 넣고 JLabel의를 넣어 말을하는지? – oopsidoodles

+0

@ViliMilner : JTextField를 JLabel에 넣지는 않겠지 만 적어도 일반적으로는 아니지만 다른 JPanel에는 더 자주 사용합니다. –

+0

@ViliMilner : 예를 참조하십시오. 내 GUI라면이 방법으로 코딩하지 않을 것입니다. –

0

을 나는 가지고 있었다. 이 문제를 해결하는 방법은 GridLayout의 행의 양을 변경하고 비어있는 JLabel을 추가하는 것입니다. 여기서는 선호도와 JTextFields를 원하는 위치와 원하는 크기를 고려해야합니다. 실제로 편집 코드의 조각 :

GridLayout gridFiveTwo = new GridLayout(5, 2); 

그리고 나는 JLabels에 넣어 다음 부분 휘잉.

JPanel inputPanel = new JPanel(); 
    inputPanel.setLayout(gridFiveTwo); 
    bodyPanel.add(inputPanel); 
    JTextField fieldOne = new JTextField(); 
    JTextField fieldTwo = new JTextField(); 
    inputPanel.add(new JLabel(textLength)); 
    inputPanel.add(fieldOne); 
    inputPanel.add(new JLabel(textWidth)); 
    inputPanel.add(fieldTwo); 
    inputPanel.add(new JLabel("")); 
    inputPanel.add(new JLabel("")); 
    inputPanel.add(new JLabel("")); 
    inputPanel.add(new JLabel("")); 
    inputPanel.add(new JLabel("")); 
    inputPanel.add(new JLabel("")); 

나는이 대답을 좋아하지 않아, 희망 누군가가이 일을 더 좋은 방법을 알고 있지만, 그 동안이 내가 사용하는 것이다.

0

null로 레이아웃 매니저를 설정합니다. 그런 다음 .setSize 속성을 사용하여 구성 요소/jTextfields의 크기를 설정할 수 있습니다.

this.setLayout(null);   //set this in your constructor 

jTextField1.setSize(20, 200); // whatever you prefer 
관련 문제