【问题标题】:Changing/setting the height of a JTextField in a BorderLayout更改/设置 BorderLayout 中 JTextField 的高度
【发布时间】:2013-01-21 14:24:34
【问题描述】:

我正在尝试设置JTextField 的高度。目前它是显示的JFrame 的全尺寸。任何想法如何将高度设置为 50?

编辑:这是修改后的代码以及截图,谢谢!

public class Display extends JFrame {

    private DrawCanvas canvas;
    private JTextField Altitude;
    private JTextField TASpeed;
    private JLabel altButton;
    private int countA = 0;
    private int countS = 0;
    private int Bcount1 = 0;
    public String Ccount = Integer.toString(Bcount1);

    public Display() {
        canvas = new DrawCanvas();
        canvas.setPreferredSize(new Dimension(CANVAS_WIDTH, CANVAS_HEIGHT));
        canvas.setLayout(new BorderLayout());
        Container cp = getContentPane();
        cp.setLayout(new BorderLayout());
        cp.add(canvas, BorderLayout.LINE_START);

        //here are the 2 side fields![enter image description here][2]
        Altitude = new JTextField("0", 5);
        Altitude.setHorizontalAlignment(JTextField.CENTER);
        Altitude.setEditable(false);
        Altitude.setOpaque(false);
        Altitude.setFont(Altitude.getFont().deriveFont(25f));

        TASpeed = new JTextField("0", 5);
        TASpeed.setHorizontalAlignment(JTextField.CENTER);
        TASpeed.setEditable(false);
        TASpeed.setOpaque(false);
        TASpeed.setFont(Altitude.getFont().deriveFont(25f));

        altButton = new JLabel();
        altButton.setText(Ccount);

        canvas.add(altButton, BorderLayout.SOUTH);

        canvas.add(Altitude, BorderLayout.LINE_END);
        canvas.add(TASpeed, BorderLayout.LINE_START);

        canvas.add(new JLabel(Ccount), BorderLayout.SOUTH);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("FLIGHT DISPLAY");
        pack();
        setVisible(true);
        requestFocus();
    }

    class DrawCanvas extends JPanel {

        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            setBackground(CANVAS_BACKGROUND);

            g.setColor(GROUND_COLOR);
            g.drawString(Ccount, 100, 100);

        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                new Display();
            }
        });
    }
}

【问题讨论】:

  • 不要使用边框布局将文本字段直接放在容器上
  • 为了更好的帮助,请尽快发布SSCCE,请不知道1)whats DrawCanvas(); 2) 为什么你设置 BorderLayout3) 没有阅读关于 LayoutManagers 的 Oracles 教程
  • 错误的问题 - 您从不设置组件的大小 (not even its sizing hints, aka min/pref/maxSize)。相反,请使用合适的 LayoutManager,f.i.尊重组件的 prefSize 总是像 FlowLayout 一样。或者换句话说:你需要了解所有关于 LayoutManagers :-)
  • 您的编辑不起作用,因为我确实需要画布,因为我省略了许多 obj..

标签: java swing height jtextfield border-layout


【解决方案1】:

由于@kleopatra 正确计算,JTextField 可以根据平台设计者对Font 的选择来计算它自己的首选大小。这个例子改变了大小。

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

/** @see http://stackoverflow.com/a/14734937/230513 */
public class Test {

    private void display() {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JTextField tfCount = new JTextField("42", 8);
        tfCount.setHorizontalAlignment(JTextField.CENTER);
        tfCount.setFont(tfCount.getFont().deriveFont(50f));
        f.add(tfCount, BorderLayout.NORTH);
        f.add(new JPanel() { //placeholder

            @Override
            public Dimension getPreferredSize() {
                return new Dimension(320, 240);
            }
        }, BorderLayout.CENTER);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new Test().display();
            }
        });
    }
}

【讨论】:

  • 不是我的意思,当您将 BorderLayout 位置更改为 LINE_END 时,它仍然是屏幕的全长!!!但也谢谢你,因为这解决了我设置文本大小的问题,如果我没有弄清楚的话,这将是我的下一个问题。我需要的是一个只有屏幕一半大小但居中对齐的 JTextField。有任何想法吗??再次感谢您的帮助
  • tfCount 添加到JPanel 并将面板添加到顶部。
  • DYM 选择边框?在上面的屏幕截图中,它是一个因 L&F 而异的暗蓝色矩形。用您当前的ssccescreenshot 更新您的问题。
  • @BenJi:既然你在画飞行显示,那么你想把数字画在哪里。根本不要使用任何 JComponents。
  • @GilbertLeBlanc 有一个好主意,example;另外,不要使用setPreferredSize;在DrawCanvas 中覆盖getPreferredSize
猜你喜欢
  • 2012-03-08
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 2013-10-24
  • 2019-04-09
  • 1970-01-01
  • 2020-08-06
  • 2011-05-09
相关资源
最近更新 更多