有没有办法将 JLabel 的 PreferredSize 设置为其组件的大小?
Is there a way to set a JLabel's PreferredSize to the size of its components?
有什么方法可以获取 JLabel 组件的(我猜是首选)大小,以便我可以根据它们调整大小?除非我设置它的首选大小,否则我的 JLabel 的大小为 0,0,但是将其大小设置为任意像素值似乎是错误的方法,因为使用 Swing 的全部意义(据我所知)并没有这样做.
我已经尝试过的事情:
- 重绘() 和重构()
- 向 JPanel 添加 LayoutManager(在本例中为 BoxLayout)
这基本上就是我在做的事情:
package invisiblelabel;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.Border;
public class InvisibleLabel {
public static JFrame frame;
public static JPanel panel;
public static JLabel visible;
public static JLabel visibleText;
public static JLabel invisible;
public static JLabel text1;
public static JLabel text2;
public static void main(String[] args) {
createGraphics();
}
public static void createGraphics(){
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = new JPanel();
visible = new JLabel();
visible.setPreferredSize(new Dimension (500,500));
Border border = BorderFactory.createLineBorder(Color.black);
visible.setBorder(border);
visible.setLayout(new BoxLayout(visible, BoxLayout.Y_AXIS));
visibleText = new JLabel ("This JLabel is visible, because it is created fitting its text.");
visible.add(visibleText);
invisible = new JLabel();
text1 = new JLabel("You can't read this anyways.");
text2 = new JLabel("You can't read this either.");
invisible.add(text1);
invisible.add(text2);
visible.add(invisible);
panel.add(visible);
frame.add(panel);
frame.setLocationRelativeTo(null);
frame.setSize(800,600);
frame.setVisible(true);
visible.repaint();
visible.revalidate();
}
}
}
我很好奇您为什么使用 JLabel
作为容器,但是...
类似的东西,覆盖 JLabel
的 getPreferredSize
方法...
@Overrride
public Dimension getPreferredSize() {
LayoutManager lm = getLayout();
return lm.preferredLayoutSize(this);
}
会让你开始。这没有考虑任何边框的要求,如果对您很重要,您还需要添加这些要求...
这还假设您已将布局管理器应用于 JLabel
有什么方法可以获取 JLabel 组件的(我猜是首选)大小,以便我可以根据它们调整大小?除非我设置它的首选大小,否则我的 JLabel 的大小为 0,0,但是将其大小设置为任意像素值似乎是错误的方法,因为使用 Swing 的全部意义(据我所知)并没有这样做.
我已经尝试过的事情:
- 重绘() 和重构()
- 向 JPanel 添加 LayoutManager(在本例中为 BoxLayout)
这基本上就是我在做的事情:
package invisiblelabel;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.Border;
public class InvisibleLabel {
public static JFrame frame;
public static JPanel panel;
public static JLabel visible;
public static JLabel visibleText;
public static JLabel invisible;
public static JLabel text1;
public static JLabel text2;
public static void main(String[] args) {
createGraphics();
}
public static void createGraphics(){
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = new JPanel();
visible = new JLabel();
visible.setPreferredSize(new Dimension (500,500));
Border border = BorderFactory.createLineBorder(Color.black);
visible.setBorder(border);
visible.setLayout(new BoxLayout(visible, BoxLayout.Y_AXIS));
visibleText = new JLabel ("This JLabel is visible, because it is created fitting its text.");
visible.add(visibleText);
invisible = new JLabel();
text1 = new JLabel("You can't read this anyways.");
text2 = new JLabel("You can't read this either.");
invisible.add(text1);
invisible.add(text2);
visible.add(invisible);
panel.add(visible);
frame.add(panel);
frame.setLocationRelativeTo(null);
frame.setSize(800,600);
frame.setVisible(true);
visible.repaint();
visible.revalidate();
}
}
}
我很好奇您为什么使用 JLabel
作为容器,但是...
类似的东西,覆盖 JLabel
的 getPreferredSize
方法...
@Overrride
public Dimension getPreferredSize() {
LayoutManager lm = getLayout();
return lm.preferredLayoutSize(this);
}
会让你开始。这没有考虑任何边框的要求,如果对您很重要,您还需要添加这些要求...
这还假设您已将布局管理器应用于 JLabel