我有很多JLabel
s(包括ImageIcon
s)JPanel
.
这JPanel
只是GUI上的一个面板; 还有很多其他面板.
我想将标签放在JPanel
容器上的精确像素坐标上.
如果不使用我怎么能这样做GroupLayout
?
大多数布局管理器都没有参数构造函数(也就是说,你可以创建一个FlowLayout new FlowLayout ()
,一个GridLayout new GridLayout ()
,一个GridBagLayout new GridBagLayout ()
等).但是,BoxLayout
要求您传递将要管理的容器和应该布置组件的轴.
我的问题是:既然你已经告诉布局管理器要布局哪个组件,你为什么要写
BoxLayout bl = new BoxLayout(myPanel, BoxLayout.Y_AXIS);
myPanel.setLayout(bl);
Run Code Online (Sandbox Code Playgroud)
而不只是第一行?
我参加了一个快速浏览的BoxLayout
源代码,看到的构造我使用(178-185线)不拨打电话到target.setLayout(this)
的那种或任何东西.看起来添加它真的很简单.有没有理由为什么它不包含在Swing库中?
如果重要,我正在使用
java版本1.7.0
Java(TM)SE运行时环境(版本1.7.0-b147)
在Win7Pro上.
谢谢!
SSCCE:
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
public class BoxLayoutSSCCE extends JFrame {
// Change this to see what I mean
public static final boolean CALL_SET_LAYOUT = true;
public BoxLayoutSSCCE () {
super("Box Layout SSCCE");
JPanel panel = new JPanel();
BoxLayout bl = new …
Run Code Online (Sandbox Code Playgroud) 如何让JLabel在框架侧面显示齐平?我在使用GridLayout或BoxLayout时遇到同样的问题.
以下是发生这种情况的示例:
JPanel content = new JPanel();
content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
content.add(new JLabel("Hello World"));
Run Code Online (Sandbox Code Playgroud)
CSS具有边距和填充的概念.Java有类似的吗?
我仍然希望左对齐但边缘和标签之间有几个像素的空间.
我想做一个看起来像上面的gui.现在我有一个面板,它将保存名称标签,名称文本字段,brith日期标签和生日文本字段.我的问题是什么是最好的布局管理器在面板上使用,以便"名称组件"行(标签+文本字段)和"出生日期组件"行(标签+文本字段),将垂直均匀地分布在小组.
我想过使用流布局,但这会导致两行组件之间没有间隙.我想过使用网格布局,但我不知道两行组件之间的间隙大小.
一个更复杂的方法......我考虑将名称标签和文本字段放在一个面板中,并将出生日期标签和文本字段放在另一个面板中,然后使基本面板边框布局和设置名称为北,生日日期为南. ..但是我仍然需要确保名称组件在名称面板中垂直居中,而birthdate组件在出生日期面板中垂直居中.
任何帮助表示赞赏.目标是确保名称组件行和出生日期组件行垂直展开,名称组件垂直居中于上半部分,出生日期组件垂直居中于下半部分.如果有什么问题让人感到困惑,请告诉我我会尝试改写以便更好地理解.
我正在使用严格的Java swing与eclipse,没有GUI构建器或类似的东西.
对于我的CSE 205(Java编程2)类,我们必须设计一个非常简单的GUI小程序.我对Swing非常熟悉,我已经将它用于我自己的一些项目.我设计的程序几乎没有问题,从Eclipse运行时,它在我的计算机上看起来很完美:
但是当我在网上提交它,它在浏览器中运行时,UI会严重痴迷,返回默认值:
我已经习惯了使用GridBagLayout,因为它很简单.这就是我在这里使用的.CreatePanel和SelectPanel类(如第一张图片中所示)都扩展了JPanel(根据我的教授).我设置每个使用:
this.setLayout(new GridBagLayout());
Run Code Online (Sandbox Code Playgroud)
以及每个组件:
//Call the method addItem() to add the create button to the panel
addItem(this, createB,0,2,2,1,defaultInset,GridBagConstraints.CENTER);
//-------
public void addItem(JPanel p, JComponent c, int x, int y, int width, int height, int[] inset, int align)
{
GridBagConstraints gc = new GridBagConstraints();
gc.gridx = x;
gc.gridy = y;
gc.gridwidth = width;
gc.gridheight = height;
gc.weightx = 0;
gc.weighty = 0;
gc.insets = new Insets(inset[0],inset[1],inset[2],inset[3]);
gc.anchor = align;
gc.fill = GridBagConstraints.NONE;
p.add(c, gc);
}
Run Code Online (Sandbox Code Playgroud)
任何人都对可能发生的事情有任何想法?考虑到超过一半的时间花在让布局看起来正确,我想要一个简单的修复.如果需要,我可以发布更多代码.谢谢你的任何建议.
- 编辑 …
我无法添加JTextField
到JFrame
.我的JFrame
包含a JLabel
和a JTextField
.首先,我添加了JLabel
,它正在工作.这是代码.
private static void createandshowGUI()
{
JFrame frame =new JFrame("HelloSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setBackground(Color.red);
frame.setSize(200,200);
JLabel label=new JLabel("New To Java!!");
frame.getContentPane().add(label);
frame.setVisible(true);
}
public static void main(String[] args) {
createandshowGUI();} //and it shows the output like below .
Run Code Online (Sandbox Code Playgroud)
然后我添加了JTextField.
JLabel label=new JLabel("New To Java!!");
frame.getContentPane().add(label);
JTextField jtf=new JTextField();
frame.getContentPane().add(jtf);
frame.setVisible(true);
Run Code Online (Sandbox Code Playgroud)
但后来它显示了这样的输出.
请有人帮我解决这个问题.我可以向JFrame添加多个组件吗?因为我是Java的新手,我在框架,ContentPane和Layouts之间存在混淆.
我想把我的JLabel对齐到左边.
String lText = "<html><b><font color = white face = comic sans ms size = 20>mybook</font></b></html>";
JLabel label = new JLabel(lText);
label.setBorder(new EmptyBorder(25,0,25,500));
Run Code Online (Sandbox Code Playgroud)
我尝试使用EmptyBorder做它,但它没有正确对齐.我正在使用FlowLayout
面对使用BoxLayout的问题
在我的示例中,我尝试降低文本字段的高度并更改按钮的宽度(如图中的绿色标记所示).我知道setPrefferedSize()和setMaximumSize()技术,但它没有按预期工作.行添加(Box.createHorizontalGlue())也没有帮助.
谢谢你的想法
public class Testy extends JPanel {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
constructGUI();
}
});
}
private static void constructGUI() {
JFrame frame = new JFrame("Testy");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JPanel centerPanel = new JPanel();
centerPanel.setBackground(Color.DARK_GRAY);
centerPanel.setPreferredSize(new Dimension(100, 400));
frame.add(centerPanel, BorderLayout.CENTER);
Testy eastPanel = new Testy();
frame.add(eastPanel, BorderLayout.EAST);
frame.pack();
frame.setVisible(true);
}
public Testy() {
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
JButton button = new JButton("Button ...... 1");
//button.setPreferredSize(...);
//button.setMaximumSize(...);
add(button);
button = new JButton("Button 2"); …
Run Code Online (Sandbox Code Playgroud) 我有一个JTabbedPane,其中2个JPanels设置为GridLayout(13,11).第一个JPanel有足够的单元格填充它离开空单元格.
第二个JPanel填充的单元格明显更少,这导致每个按钮被拉伸以填满整行.
有没有办法让GridLayout尊重空单元格,所以两个JPanels中的按钮大小相同?
我有一个用JFrame
root JPanel
实例化的根GridBagLayout
.在运行时,面板被填充有基于某些描述的部件,并且宽度,高度以及x,y COORDS中给出的描述中,以与被使用gridwidth
,gridheight
,gridx
和gridy
在字段GridBagConstraints
.组件本身也可以JPanel
是带有自己子组件的组件GridBagConstraints
,GUI在树中描述,因此Frame是递归填充的.
我遇到的问题是,当调整框架大小时,内部组件不会被拉伸以填充其给定的宽度和高度.我已经给出了下面的布局代码示例,并附有截图.
import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.util.*;
public class GridBagTest extends JPanel {
private final GridBagConstraints gbc = new GridBagConstraints();
public GridBagTest(){
setLayout(new GridBagLayout());
add(gbcComponent(0,0,1,2), gbc);
add(gbcComponent(1,0,2,1), gbc);
add(gbcComponent(1,1,1,1), gbc);
add(gbcComponent(2,1,1,1), gbc);
}
//Returns a JPanel with some component inside it, and sets the GBC fields
private JPanel gbcComponent(int x, int y, int w, int h){ …
Run Code Online (Sandbox Code Playgroud) java ×10
layout-manager ×10
swing ×10
layout ×3
awt ×2
boxlayout ×2
flowlayout ×1
grid-layout ×1
jframe ×1
jlabel ×1
jpanel ×1
jtextfield ×1
resize ×1