gpt4 book ai didi

java - 当我尝试调整 JFrame 大小时,JTextField 未调整大小

转载 作者:行者123 更新时间:2023-12-01 10:34:17 26 4
gpt4 key购买 nike

我正在使用下面的代码来设计我的 JFrame。但是,如果我尝试更改 JFrame 大小,则 JTextfield 不会调整大小。我已使用 Border Layout 并根据一些布局建议将其对齐到中心以处理调整大小。

public class Parser extends JFrame{

static JFrame frame;
static JLabel lblFile;
static JPanel pHdr;
static JPanel pBody;
static JPanel pFtr;
static JPanel pMainPanel;
static JPanel pOuterMainPanel;
static JLabel lblImage;
public Parser()
{
String startUpPath = System.getProperty("user.dir");
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame = new JFrame("Log Parser");
frame.setPreferredSize(new Dimension(700,500));
frame.setLocation((int)screenSize.getWidth()/3,(int)screenSize.getHeight()/4);
frame.setLayout(new BorderLayout());

//initialize the JPanels and add to frames
pOuterMainPanel = new JPanel(new BorderLayout());

pHdr = new JPanel(new BorderLayout(700,100));
pHdr.setPreferredSize(new Dimension(700,100));
pHdr.setOpaque(true);
pHdr.setBackground(Color.WHITE);
pOuterMainPanel.add(pHdr,BorderLayout.NORTH);

pMainPanel = new JPanel(new BorderLayout(700,400));
pBody = new JPanel(new GridBagLayout());
pMainPanel.add(pBody,BorderLayout.CENTER);
pBody.setPreferredSize(new Dimension(700,400));
pBody.setOpaque(true);
pBody.setBackground(Color.WHITE);
pOuterMainPanel.add(pMainPanel,BorderLayout.CENTER);

pFtr = new JPanel(new BorderLayout(700,50));
pFtr.setOpaque(true);
pFtr.setBackground(Color.WHITE);
pFtr.setPreferredSize(new Dimension(700,50));
pOuterMainPanel.add(pFtr,BorderLayout.SOUTH);

//Customize Hdr Panel
lblImage = new JLabel();
ImageIcon imgicon = new ImageIcon(startUpPath + "\\Resources\\IM.png");
lblImage.setIcon(imgicon);
pHdr.add(lblImage,BorderLayout.CENTER);

//Customize Body Panel
GridBagConstraints gc = new GridBagConstraints();
gc.gridx=0;
gc.gridy=0;
gc.anchor = GridBagConstraints.CENTER;

JLabel lblPath = new JLabel("Path ");
lblPath.setForeground(Color.darkGray);
lblPath.setFont(new Font("Times New Roman", Font.BOLD, 15));
pBody.add(lblPath,gc);
gc.gridx++;


final JTextField txtFilePath = new JTextField(30);
txtFilePath.setPreferredSize(new Dimension(30,30));
pBody.add(txtFilePath,gc);
gc.gridx++;

JLabel lblsp1 = new JLabel(" ");
pBody.add(lblsp1,gc);
gc.gridx++;

final JButton btnBrowse = new JButton("Browse");
btnBrowse.setBackground(new Color(224,224,224));
btnBrowse.setPreferredSize(new Dimension(80,30));
pBody.add(btnBrowse,gc);
gc.gridx++;


//Finalize the Frame
frame.add(pOuterMainPanel,BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);


btnBrowse.addMouseListener(new MouseAdapter()
{
public void mouseEntered(MouseEvent evt)
{
btnBrowse.setBackground(new Color(30,91,195));
btnBrowse.setForeground(Color.white);
}
public void mouseExited(MouseEvent evt)
{
btnBrowse.setBackground(new Color(224,224,224));
btnBrowse.setForeground(Color.black);
}

});

FocusListener fl = new FocusListener() {

@Override
public void focusLost(FocusEvent e) {
// TODO Auto-generated method stub
txtFilePath.setBorder(BorderFactory.createLineBorder(Color.GRAY,1));
}

@Override
public void focusGained(FocusEvent e) {
// TODO Auto-generated method stub
txtFilePath.setBorder(BorderFactory.createLineBorder(new Color(34,5,134),2));
}
};

txtFilePath.addFocusListener(fl);

}
public static void main(String[] args) {
// TODO Auto-generated method stub
new Parser();
}

}

最佳答案

您绝对应该了解更多关于如何 GridBagLayout有效。
为了解决您的问题,我想向您介绍权重变量。它们是 GridBagConstraints 的一部分,并且由于您声明了自己的实例,因此它们使用值 0 进行初始化。
因此,您需要设置 gc.fill = GridBagConstraints.HORIZONTAL; 以鼓励组件使用可用的水平空间。
布局通过使用权重值来确定将“给予”每个组件关于其preferredSize的可用空间量。
因此,如果您希望 JTextField 获得所有可用空间,请声明 gc.weightx = 1.0f; 表示在添加之前水平方向上有 100% 的可用空间。并在添加下一个元素之前将其设置回 0.0f

关于java - 当我尝试调整 JFrame 大小时,JTextField 未调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34875212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com