0

StackOverflow の皆さん、こんにちは。解決できないように見える問題に遭遇しました。始める前に、私は初心者ではありませんが、信じられないほど上級者でもないことを警告しておく必要があります。そのため、回答を適切に表現できれば幸いです。

JTextField のサイズを制御することはできず、私が知っているあらゆる方法を使用してきました。コードは次のとおりです。

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を使用しているため、2つのテキストフィールドがすべてのスペースを使い果たしている可能性があるため、setPreferredSizeは機能しません. また、行数を 3 に設定して、2 行目に空の JLabels を 2 つだけ配置できるのではないかと考えましたが、これは少し原始的な方法のようです。これを行う効率的な方法はありますか?

編集:問題がある場合は、高さだけでなく、setPreferredSize を使用してテキストフィールドの幅を制御できます。

4

3 に答える 3

0

レイアウト マネージャーを null に設定します。次に、.setSize プロパティを使用して、コンポーネント / jTextfields のサイズを設定できます。

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

jTextField1.setSize(20, 200); // whatever you prefer
于 2016-02-09T19:42:30.200 に答える
0

私はこの答えが好きではありませんが、私が抱えていた同じ問題に遭遇した人のためにここに置くべきだと感じました. これを解決する方法は、GridLayout の行数を変更し、適切と思われる場所に空の JLabels を追加することです。ここでは、好みの問題であり、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(""));

私はこの答えが好きではありません。誰かがこれを行うためのより良い方法を知っていることを願っていますが、当面はこれを使用しています。

于 2013-10-13T12:50:02.773 に答える