标题:[求助]关于layout的布局问题--挺着急的
只看楼主
limaoyuan
Rank: 1
等 级:新手上路
帖 子:493
专家分:0
注 册:2006-6-25
 问题点数:0 回复次数:15 
[求助]关于layout的布局问题--挺着急的

请帮忙看下,我想在以下代码的格式设成

用户名:
密码:
提示
按钮

这样固定的四行

请哪位高手帮我实现一下,谢谢

我已自己试过N多遍了,还是不太会,还有如果设置一个空的JTextField长一点的格?谢谢!!

等待中...


import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class login extends JFrame
{
JTextField jtf;//用户名
JPasswordField jpwf;//密码
JLabel lblTishi;//提示
login()
{
JFrame jf = new JFrame("MY.登陆");
jf.setSize(250,140);
JPanel jp = new JPanel();
jf.setContentPane(jp);
JLabel jl = new JLabel("用户名");
JLabel jl2 = new JLabel("密 码");
jtf = new JTextField("请输入用户名");
jpwf = new JPasswordField("123456");
lblTishi = new JLabel();
JButton jbOK = new JButton("OK");
JButton jbCancel = new JButton("Cancel");


jbOK.addActionListener(
new ActionListener()//事件方法的模式
{
public void actionPerformed(ActionEvent ae) //事件方法
{

if(jtf.getText().equals("123")) //正确密码123
{
lblTishi.setText("验证成功!");
}
else
{
lblTishi.setText("用户名或密码不正确请从新输入!");
}

}
}
);
// jp.setLayout(new BorderLayout(3,4));
jp.add(jl) ;
jp.add(jtf) ;

jp.add(jl2) ;
jp.add(jpwf) ;

jp.add(lblTishi);

jp.add(jbOK);
jp.add(jbCancel);

jf.setVisible(true);

}
public static void main(String[] args)
{
login log = new login();
}
}

搜索更多相关主题的帖子: layout 
2006-08-16 15:11
lyd8935
Rank: 1
等 级:新手上路
帖 子:219
专家分:0
注 册:2006-5-14
得分:0 
jf.setLayout( new GridLayout( 4, 1 ));
2006-08-16 15:44
limaoyuan
Rank: 1
等 级:新手上路
帖 子:493
专家分:0
注 册:2006-6-25
得分:0 

首先谢谢楼上的意见

我改成
jp.setLayout( new GridLayout( 4, 1 ));
可以实现成以下样子,但还不是我想要的..

.
我也试过要去具体改位置,可我还是不太知道怎么改..

谁能帮我废废心,改成我想要的样子,多谢了



我在说's blog   http://www..cn
2006-08-16 22:38
lyd8935
Rank: 1
等 级:新手上路
帖 子:219
专家分:0
注 册:2006-5-14
得分:0 

用 JLabel 对象填充多余的,就OK了,
JLabel label = new Label( " " );
panel.add( label ); //填在正确的位置
不记得 GridLayout 下有没有下面这个方法,可以改变控件大小
label.setPreferredSize( new Dimension( 58, 30 ));

不过我想你不喜欢这种布局,换个流布局(FlowLayout) 看看
这是我自己写的一个界面( 截取部分 ), 写的不好将就着看看吧,这是不是你想要的布局格式


import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Index {

private JFrame frame;
private JPanel panel;
private JPanel panelChild;
private JMenuBar menuBar;

private JMenu menuUse;
private JMenu menuHelp;
private JMenu menuOut;

private JMenuItem menuItemUp;
private JMenuItem menuItemDown;
private JMenuItem menuItemBack;
private JMenuItem menuItemAbout;
private JMenuItem menuItemExit;

private JLabel label1;
private JLabel label2;


private JLabel machine;
private JLabel card;
private JLabel passport;
private JLabel start;

private JComboBox boxMachine;
private JTextField testCard;
private JTextField testPassport;
private JTextField testStart;

private JButton submit;
private JButton reset;

private Date data;
private SimpleDateFormat simple;


public Index()
{
frame = new JFrame( "网吧计费管理系统" );
panel = new JPanel();
panelChild = new JPanel();

menuBar = new JMenuBar();

menuUse = new JMenu( " 使用" );
menuHelp = new JMenu( " 帮助" );
menuOut = new JMenu( " 退出");

menuItemUp = new JMenuItem( "上机" );
menuItemDown = new JMenuItem( "下机" );
menuItemBack = new JMenuItem( "返回" );
menuItemAbout = new JMenuItem( "关于" );
menuItemExit = new JMenuItem( "退出" );

label1 = new JLabel( "欢迎使用网吧计费管理系统" );
label2 = new JLabel( "5本8帅制作" );

machine = new JLabel( "机器号码:" );
card = new JLabel( "卡  号:" );
passport = new JLabel( "密  码:" );
start = new JLabel( "开始时间:" );

boxMachine = new JComboBox();
testCard = new JTextField();
testPassport = new JTextField();
testStart = new JTextField();

submit = new JButton( "提交" );
reset = new JButton( "重置" );

data = new Date();
simple = new SimpleDateFormat( "yyyy-MM-dd hh: mm: ss" );


init();
getJPanelChild();



}

public void init()
{
menuBar.add( menuUse );
menuBar.add( menuHelp );
menuBar.add( menuOut );

menuUse.add( menuItemUp );
menuUse.add( menuItemDown );
menuUse.add( menuItemBack );
menuHelp.add( menuItemAbout );
menuOut.add( menuItemExit );

menuBar.setBounds( new Rectangle( 0, 0, 400, 30 ));
menuUse.setPreferredSize( new Dimension( 58, 30 ));
menuHelp.setPreferredSize( new Dimension( 58, 30 ));
menuOut.setPreferredSize( new Dimension( 58, 30 ));

label1.setBounds( new Rectangle( 45, 50, 300, 50 ));
label1.setFont(new Font("\u534e\u6587\u884c\u6977", Font.BOLD, 24));

label2.setBounds( new Rectangle( 130, 120, 200, 50 ));
label2.setFont(new Font("Dialog", Font.BOLD, 12));


/*** 上机事件 ***/
menuItemUp.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent ae )
{
label1.setVisible( false );
label2.setVisible( false );
panelChild.setVisible( true );

}
});

/*** menuItemDown - 下机事件 ***/
menuItemDown.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent ae )
{

}
});

/*** menuItemBack - 返回最初界面事件***/
menuItemBack.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent ae )
{
label1.setVisible( true );
label2.setVisible( true );
panelChild.setVisible( false );

}
});

/*** menuItemExit事件 退出信息 ***/
menuItemExit.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent ae )
{
System.exit( 0 );
}
});




panel.add( label1 );
panel.add( label2 );
panel.add( menuBar );

panel.add( panelChild );

panel.setLayout( null );
frame.setLocation( 350, 150 );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setContentPane( panel );
frame.setSize( new Dimension( 400, 400 ));
frame.setVisible( true );
}


/*** 登陆界面方法 ***/
public void getJPanelChild()
{

machine.setPreferredSize(new Dimension(80, 30));
boxMachine.setPreferredSize(new Dimension(150, 30));

card.setPreferredSize(new Dimension(80, 30));
testCard.setPreferredSize(new Dimension(150, 30));

passport.setPreferredSize(new Dimension(80, 30));
testPassport.setPreferredSize(new Dimension(150, 30));

start.setPreferredSize(new Dimension(80, 30));
testStart.setPreferredSize(new Dimension(150, 30));

submit.setPreferredSize(new Dimension(80, 30));
reset.setPreferredSize(new Dimension(80, 30));

boxMachine.addItem( "请选择机器号码" );
for( int i = 1; i <= 50; i++ )
{
boxMachine.addItem( new Integer( i ));

}

testStart.setText( simple.format( data ));

/*** reset事件,清空信息 ****/
reset.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent ae )
{
testCard.setText( "" );
testPassport.setText( "" );
}
});


panelChild.add( machine );
panelChild.add( boxMachine );
panelChild.add( card );
panelChild.add( testCard );
panelChild.add( passport );
panelChild.add( testPassport );
panelChild.add( start );
panelChild.add( testStart );
panelChild.add( new JLabel( "        ") );
panelChild.add( new JLabel( "          ") );
panelChild.add( submit );
panelChild.add( new JLabel( "  " ));
panelChild.add( reset );


panelChild.setBounds( new Rectangle( 50, 50, 300, 300 ));
panelChild.setLayout( new FlowLayout( FlowLayout.CENTER, 5, 10 ));
panelChild.setVisible( false );

}
}

[此贴子已经被作者于2006-8-16 23:22:47编辑过]

2006-08-16 23:17
limaoyuan
Rank: 1
等 级:新手上路
帖 子:493
专家分:0
注 册:2006-6-25
得分:0 




首先先表示感lyd8935百忙之中抽出时间来帮我解决这个问题

你做的相当不错,我就是想做成和你上机那个界面一样的效果,我仔细看了看你写的,又查了查我能看懂的API,还是有以下疑问,望能帮我继续解决下,谢谢!


/*下面这些话是在设控件的位置吗? 80和30分别代表什么? 还是下面150和30是什么意思? 这几个数是怎么判断出来的?*/

machine.setPreferredSize(new Dimension(80, 30));
boxMachine.setPreferredSize(new Dimension(150, 30));

card.setPreferredSize(new Dimension(80, 30));
testCard.setPreferredSize(new Dimension(150, 30));

passport.setPreferredSize(new Dimension(80, 30));
testPassport.setPreferredSize(new Dimension(150, 30));

start.setPreferredSize(new Dimension(80, 30));
testStart.setPreferredSize(new Dimension(150, 30));

submit.setPreferredSize(new Dimension(80, 30));
reset.setPreferredSize(new Dimension(80, 30));

/*这两句是什么意思?*/

panelChild.setBounds( new Rectangle( 50, 50, 300, 300 ));//50,50,300,300这个值是怎么算出来的?我不会摆位置
panelChild.setLayout( new FlowLayout( FlowLayout.CENTER, 5, 10 ));//还有这句5,10代表的是什么?怎么算出来的?


我在说's blog   http://www..cn
2006-08-17 09:13
limaoyuan
Rank: 1
等 级:新手上路
帖 子:493
专家分:0
注 册:2006-6-25
得分:0 
补充一下,你是怎么设的机器号码和卡号怎么就不在同一行中了呢?
谢谢,期待ing .....

我在说's blog   http://www..cn
2006-08-17 09:16
lyd8935
Rank: 1
等 级:新手上路
帖 子:219
专家分:0
注 册:2006-5-14
得分:0 

我的 panelChild 总共就设置了(300 X 300) 的大小 因为是采用的流布局,会自动将我的控件从左到右,从上到下的添加进去,当一行内无法装下其它控件时,会自动换行... 你看我设置的控件大小....


方法 setPreferredSize() 是设置控件大小的,
对齐方式在 构造方法 FlowLayout() 里面,第一个参数就是设置你的对齐方式,

machine.setPreferredSize(new Dimension(80, 30));
boxMachine.setPreferredSize(new Dimension(150, 30 ))
//构造方法 Dimension( int width, int height ); 分别指定宽和高

panelChild.setBounds( new Rectangle( 50, 50, 300, 300 ));//50,50,300,300这个值是怎么算出来的?我不会摆位置
/* 构造方法 Rectangle(int x, int y, int width, int height) x: X轴坐标,Y: Y轴坐标(因为我这个是面版里在加个面版,即在母版上的显示位置, 面版width: 要显示的宽度 height:显示的 高度 */

panelChild.setLayout( new FlowLayout( FlowLayout.CENTER, 5, 10 ));//还姓饩?,10代表的是什么?怎么算出来的?
/*构造方法FlowLayout(int align, int hgap, int vgap ) align: 即对其方式, hgap: 组件之间以及组件与 Container 的边之间的水平间隙, vgap: 组件之间以及组件与 Container 的边之间的垂直间隙*/


[此贴子已经被作者于2006-8-17 9:43:12编辑过]

2006-08-17 09:33
limaoyuan
Rank: 1
等 级:新手上路
帖 子:493
专家分:0
注 册:2006-6-25
得分:0 

也就是说一共面板才300宽,80+150之后就不可能再加80在同一行中了,所以要换另一行是吗?

machine.setPreferredSize(new Dimension(80, 30));
boxMachine.setPreferredSize(new Dimension(150, 30 ))


机器号码上面会空一行,是因为你里面panelChild面板的位置设在中间了?

那你怎么算是X,Y坐标?我不太会算..


我在说's blog   http://www..cn
2006-08-17 10:04
jlu_cg
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2006-7-3
得分:0 

你可以看一下这个例子

file://NamePass.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class NamePass extends JFrame {

file://建造一个容器
void bulidConstraints(GridBagConstraints gbc,int gx,int gy,int gw,int gh,int wx,int wy){
gbc.gridx = gx;
gbc.gridy = gy;
gbc.gridwidth = gw;
gbc.gridheight = gh;
gbc.weightx = wx;
gbc.weighty = wy;
}
file://构造函数
public NamePass(){
super("Username and Password");
setSize(290,110);
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints constraints = new GridBagConstraints();
JPanel pane = new JPanel();
pane.setLayout(gridbag);

bulidConstraints(constraints,0,0,1,1,10,40);
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.EAST;
JLabel l = new JLabel("Name:",JLabel.LEFT);
gridbag.setConstraints(l,constraints);
pane.add(l);

bulidConstraints(constraints,1,0,1,1,90,0);
constraints.fill = GridBagConstraints.HORIZONTAL;
JTextField tfname = new JTextField();
gridbag.setConstraints(tfname,constraints);
pane.add(tfname);

bulidConstraints(constraints,0,1,1,1,0,40);
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.EAST;
JLabel l2 = new JLabel("Password",JLabel.LEFT);
gridbag.setConstraints(l2,constraints);
pane.add(l2);

bulidConstraints(constraints,1,1,1,1,0,0);
constraints.fill = GridBagConstraints.HORIZONTAL;
JPasswordField tfpass = new JPasswordField();
tfpass.setEchoChar('*');
gridbag.setConstraints(tfpass,constraints);
pane.add(tfpass);

bulidConstraints(constraints,0,2,2,1,0,20);
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.CENTER;
JButton okb = new JButton("OK");
gridbag.setConstraints(okb,constraints);
pane.add(okb);

setContentPane(pane);
}
file://主函数
public static void main(String[] arguments){
NamePass f = new NamePass();
ExitWindow exit = new ExitWindow();
f.addWindowListener(exit);
f.show();
}
}

file://退出窗口
class ExitWindow extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(0);
}
}


2006-08-17 10:12
limaoyuan
Rank: 1
等 级:新手上路
帖 子:493
专家分:0
注 册:2006-6-25
得分:0 
注释都没有,更晕.

我在说's blog   http://www..cn
2006-08-17 10:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-84319-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.152036 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved