当我更改字体时,JTextField的大小也会更改 [英] JTextField Size Changing When I Change The Font

查看:91
本文介绍了当我更改字体时,JTextField的大小也会更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我更改JTextField的字体时,实际的JTextField会调整大小,是否有帮助?

When I Change The Font Of My JTextField The Actual JTextField Resizes, Any Help?

我正在使用计算器,显然基于代码的糟糕程度,您可以判断出我是菜鸟

I am working on a calculator and obviously based on how bad the code is you can tell the I am a noob

任何帮助都会得到赞赏

代码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.ComponentOrientation;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;

import javax.swing.JButton;
import javax.swing.JFrame;
javax.swing.JTextField;



  public class Ken {

static JTextField text = new JTextField("0",37);



public static void frame(){
    JFrame frame = new JFrame("MyCalc");
    frame.setSize(460, 600);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    frame.setResizable(false);
    FlowLayout fl = new FlowLayout(0, 30, 20);
    setLayout(fl);

    frame.getContentPane().setLayout(fl);
    Container con = frame.getContentPane();
    con.setBackground(Color.LIGHT_GRAY);
    Font f = new Font("MS UI Gothic", Font.BOLD, 40);
    Font f2 = new Font("Engravers MT", Font.PLAIN, 40);
    int bHeight = 80;
    int bWidth = 70;
    text.setPreferredSize(new Dimension(bHeight, bWidth));
    text.setBackground(Color.GREEN);
    text.setFont(f2);


    frame.add(text, BorderLayout.NORTH);

    JButton oneButton = new JButton("1");
    oneButton.setPreferredSize(new Dimension(bHeight, bWidth));
    oneButton.setBackground(Color.DARK_GRAY);
    oneButton.setForeground(Color.GREEN);
    oneButton.setFont(f);
    frame.add(oneButton);

    JButton twoButton = new JButton("2");
    twoButton.setPreferredSize(new Dimension(bHeight, bWidth));
    twoButton.setBackground(Color.DARK_GRAY);
    twoButton.setForeground(Color.GREEN);
    twoButton.setFont(f);
    frame.add(twoButton);

    JButton threeButton = new JButton("3");
    threeButton.setPreferredSize(new Dimension(bHeight, bWidth));
    threeButton.setBackground(Color.DARK_GRAY);
    threeButton.setForeground(Color.GREEN);
    threeButton.setFont(f);
    frame.add(threeButton);

    JButton plusButton = new JButton("+");
    plusButton.setPreferredSize(new Dimension(bHeight, bWidth));
    plusButton.setBackground(Color.DARK_GRAY);
    plusButton.setForeground(Color.GREEN);
    plusButton.setFont(f);
    frame.add(plusButton);

    JButton fourButton = new JButton("4");
    fourButton.setPreferredSize(new Dimension(bHeight, bWidth));
    fourButton.setBackground(Color.DARK_GRAY);
    fourButton.setForeground(Color.GREEN);
    fourButton.setFont(f);
    frame.add(fourButton);

    JButton fiveButton = new JButton("5");
    fiveButton.setPreferredSize(new Dimension(bHeight, bWidth));
    fiveButton.setBackground(Color.DARK_GRAY);
    fiveButton.setForeground(Color.GREEN);
    fiveButton.setFont(f);
    frame.add(fiveButton);

    JButton sixButton = new JButton("6");
    sixButton.setPreferredSize(new Dimension(bHeight, bWidth));
    sixButton.setBackground(Color.DARK_GRAY);
    sixButton.setForeground(Color.GREEN);
    sixButton.setFont(f);
    frame.add(sixButton);

    JButton minusButton = new JButton("-");
    minusButton.setPreferredSize(new Dimension(bHeight, bWidth));
    minusButton.setBackground(Color.DARK_GRAY);
    minusButton.setForeground(Color.GREEN);
    minusButton.setFont(f);
    frame.add(minusButton);

    JButton sevenButton = new JButton("7");
    sevenButton.setPreferredSize(new Dimension(bHeight, bWidth));
    sevenButton.setBackground(Color.DARK_GRAY);
    sevenButton.setForeground(Color.GREEN);
    sevenButton.setFont(f);
    frame.add(sevenButton);

    JButton eightButton = new JButton("8");
    eightButton.setPreferredSize(new Dimension(bHeight, bWidth));
    eightButton.setBackground(Color.DARK_GRAY);
    eightButton.setForeground(Color.GREEN);
    eightButton.setFont(f);
    frame.add(eightButton);

    JButton nineButton = new JButton("9");
    nineButton.setPreferredSize(new Dimension(bHeight,bWidth));
    nineButton.setBackground(Color.DARK_GRAY);
    nineButton.setForeground(Color.GREEN);
    nineButton.setFont(f);
    frame.add(nineButton);

    JButton timesButton = new JButton("*");
    timesButton.setPreferredSize(new Dimension(bHeight, bWidth));
    timesButton.setBackground(Color.DARK_GRAY);
    timesButton.setForeground(Color.GREEN);
    timesButton.setFont(f);
    frame.add(timesButton);

    JButton zeroButton = new JButton("0");
    zeroButton.setPreferredSize(new Dimension(bHeight, bWidth));
    zeroButton.setBackground(Color.DARK_GRAY);
    zeroButton.setForeground(Color.GREEN);
    zeroButton.setFont(f);
    frame.add(zeroButton);

    JButton enterButton = new JButton("=");
    enterButton.setPreferredSize(new Dimension(190, bWidth));
    enterButton.setBackground(Color.DARK_GRAY);
    enterButton.setForeground(Color.GREEN);
    enterButton.setFont(f);
    frame.add(enterButton);

    JButton dividButton = new JButton("/");
    dividButton.setPreferredSize(new Dimension(bHeight, bWidth));
    dividButton.setBackground(Color.DARK_GRAY);
    dividButton.setForeground(Color.GREEN);
    dividButton.setFont(f);
    frame.add(dividButton);

    frame.setComponentOrientation(
            ComponentOrientation.LEFT_TO_RIGHT);
}



private static Dimension Dimension(int bHeight, int bWidth) {
    // TODO Auto-generated method stub
    return null;
}



private static void setLayout(FlowLayout fl) {
    // TODO Auto-generated method stub

}



public static void main(String[] args){
    frame();
}
}

推荐答案

当我更改JTextField的字体时,实际的JTextField会调整大小

When I Change The Font Of My JTextField The Actual JTextField Resizes

是的,这是Swing组件的预期行为.更改属性后,它们会自动调整大小.这是一件好事,您应该保留默认的行为.也就是说,您不应该尝试使用setPreferredSize()方法手动设置组件的大小.

Yes this is the desired behaviour of Swing components. They automatically resize themselves when properties are changed. This is a good thing and you should leave the default behaviour. That is, you should not be trying to manually set the size of the component by using the setPreferredSize() method.

static JTextField text = new JTextField("0",37);

问题是您指定的列大小太大.列大小是字符数,而不是像素数.使其更合理:

The problem is that you have specified a column size that is too big. The columns size is the number of characters, not pixels. Make it something more reasonable:

static JTextField text = new JTextField("0",10);

这篇关于当我更改字体时,JTextField的大小也会更改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆