【发布时间】:2015-07-14 11:57:30
【问题描述】:
我有一个 JLabel。 JLabel的代码如下。
panelmain = new JPanel();
panelmain.setLayout(null);
panelmain.setPreferredSize(new java.awt.Dimension(800, 600));
panelmain.addComponentListener(listen);
panelmain.setBorder(null);
titlebar = new JLabel("Hello World");
titlebar.setBounds(10, 10, 100, 30);
panelmain.add(titlebar);
我的问题是,如果我改变titlebar的字体(即JLabel),那么如何改变titlebar的大小(在代码中已经设置为titlebar.setBounds(10, 10, 100, 30);)?
由 Girish 编辑
我的完整代码如下。
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class IFrame extends JInternalFrame {
/**
*
*/
private static final long serialVersionUID = 6526561589695424088L;
private JScrollPane jsp;
private IFListen listen;
private JPanel panelmain;
protected JPanel panel;
private String title;
private JLabel titlebar;
public IFrame()
{
this.title="";
init();
}
public IFrame(String title)
{
this.title=title;
init();
}
private void init()
{
setLayout(null);
listen=new IFListen();
panelmain=new JPanel();
panelmain.setLayout(null);
panelmain.setPreferredSize(new java.awt.Dimension(800, 600));
panelmain.addComponentListener(listen);
panelmain.setBorder(null);
titlebar=new JLabel("Hello World");
titlebar.setFont(new java.awt.Font("Monotype Corsiva", 1, 48));
panelmain.add(titlebar);
panel=new JPanel();
panel.setBorder(javax.swing.BorderFactory.createTitledBorder(title));
panel.setMinimumSize(new java.awt.Dimension(400, 400));
panel.setSize(400, 400);
panelmain.add(panel);
jsp=new JScrollPane(panelmain);
jsp.setBorder(null);
add(jsp);
this.addComponentListener(listen);
}
//INFO Custom Methods
public void setTitleFont(java.awt.Font font)
{
titlebar.setFont(font); //Here I want to change size of label.
}
//INFO Listener Class for IFrame
private class IFListen implements ComponentListener
{
//INFO Overridden Methods
@Override
public void componentResized(ComponentEvent e)
{
if(e.getSource() instanceof IFrame)
jsp.setBounds(5, 5, getWidth()-20, getHeight()-20);
else if(e.getSource()==panelmain)
{
panel.setLocation(Integer.parseInt(panelmain.getWidth()/2-panel.getWidth()/2+""), 0);
}
}
//INFO Unimplemented Methods
@Override
public void componentShown(ComponentEvent arg0) {}
@Override
public void componentHidden(ComponentEvent arg0) {}
@Override
public void componentMoved(ComponentEvent arg0) {}
}
}
我已经评论了字体大小改变的地方,我想改变 jlabel 的大小。
【问题讨论】:
-
不使用 setBounds? JLabel 将在字体更改时调整大小。
-
现在你有一个具体的例子来说明为什么你不应该绝对定位元素,而是使用布局管理器。布局管理器负责处理。
-
不要使用 setPreferredSize,您已经阻止标签计算它需要的大小。不要使用空布局,使用适当的布局
-
“我不想使用任何布局。”顺便说一句,请检查null-layout-manager 标签中的一些问题。我猜想在已接受答案的问题中,19/20(或可能更高)通过使用布局(+填充和空白边框)得到解决。
-
好的。因此,如果没有布局管理器,您所拥有的将无法工作,也无法与布局管理器一起使用。因此,无论解决方案如何,您都需要修复。这里所有经过实验的开发人员都告诉您使用布局管理器。你认为你应该怎么做?尝试使用布局管理器进行操作,如果仍然有问题,请执行 Andrew 告诉您的操作。在上面的评论中。
标签: java swing layout-manager null-layout-manager