我该用哪种布局 要实现的结果我用的网格4行2列,效果球指点 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 网格三行一列,第二,第三行装进Jpanel里,再对Jpanel进行布局。 第一行的用JPanel,白色部分可以用setBounds();更加达到你想要的效果 密码和按钮放JPanel?用户名放JFram? 听我的吧。你什么布局都别用。这样是最合适的。java的图形界面功能真的是太弱了,前几天我自己尝试写一个游戏界面,就找不到任何一个适合的布局。contentPane.setLayout(null);//设置布局界面为空Jpanel1.this.setBounds(x, y, h, w);//JPanle里存放你准备添加的组件。x,y指的是左上角那个点相对于你Jrame界面的位置,h,w就是高和宽了。JLabel2.this.setBounds(x, y, h, w);contentPane.add(Jpanel1);contentPane.add(JLabel1);只要实现量好了坐标,用这中方式可以实现任何形式的布局。 发一个相似的,只需要把前面的logintext改成图片就可以了。这个的缺点是不能改变Jpaenl的大小,不过这个我觉得应该用不到。毕竟没有谁会故意拖动登陆框的大小。public class LoginJpaenl extends JPanel{ private JLabel logintext;//添加的组件 private JLabel usernametext; private JLabel passwordtext; private JTextField password; private JButton loginBtn; private JButton registerBtn; private JButton exitBtn; public LoginJpaenl(JLabel errortext,JTextField username,JTextField password,JButton loginBtn,JButton registerBtn,JButton exiButton) { this.setBounds(250, 200, 300, 200); this.setLayout(null); this.setBorder(BorderFactory.createLineBorder(Color.black)); this.loginBtn=loginBtn; this.registerBtn=registerBtn; this.exitBtn=exiButton; logintext=new JLabel(); logintext.setBounds(130, 20, 100, 20); logintext.setText("用户登录"); errortext.setBounds(30, 45, 200, 20); usernametext=new JLabel(); usernametext.setBounds(20, 70, 60, 20); usernametext.setText("账户名:"); username.setBounds(80, 70, 200, 20); passwordtext=new JLabel(); passwordtext.setBounds(20, 110, 60, 20); passwordtext.setText("密 码:"); password.setBounds(80, 110, 200, 20); loginBtn.setBounds(30, 150, 60, 30); registerBtn.setBounds(120, 150, 60, 30); exitBtn.setBounds(210, 150, 60, 30); this.add(logintext); this.add(errortext); this.add(usernametext); this.add(username); this.add(passwordtext); this.add(password); this.add(loginBtn); this.add(registerBtn); this.add(exitBtn); }} 那天系统的字体被改变了,显示也会变形。除非非常简单的界面,一般不会使用jre自带的布局管理器,不是太简单就是太难用。JGoodies FormLayout、或 MiGLayout 才是更好的选择。 第一行的用JPanel,白色部分可以用一个JPanel空布局,然后指定坐标;后面一个可以用一个JPanel用边界布局。更加达到你想要的效果 楼主最好是布局设置为null 这样相当于不受任何布局控制 这样可以通过坐标想怎么显示就怎么显示 还有因为楼主的功能不需要自动伸缩 所以即使用坐标的话布局也不会乱的 两台设置了不同大小界面字体的系统怎么适应?一个使用了9pt,一个使用11pt 您是专业做 Swing 的? import java.awt.BorderLayout;import java.awt.FlowLayout;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.Insets;import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JTextField;import javax.swing.SwingUtilities;import javax.swing.UIManager;/** * * @date 07/11/2012 */public class LoginPanel extends JPanel { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch(Exception e) { e.printStackTrace(); } JDialog dialog = new JDialog(); dialog.setTitle(dialogTitle); dialog.setContentPane(new LoginPanel()); dialog.pack(); dialog.setLocationRelativeTo(null); dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); dialog.setVisible(true); } }); } public LoginPanel() { setLayout(new BorderLayout(5, 5)); add(layoutCenterPanel(), BorderLayout.CENTER); add(layoutControlPanel(), BorderLayout.SOUTH); setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); } private JPanel layoutCenterPanel() { JPanel panel = new JPanel(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.anchor = GridBagConstraints.WEST; // gbc.gridwidth = 1; gbc.gridheight = 1; gbc.insets = new Insets(10, 10, 10, 10); gbc.gridx = 0; gbc.gridy = 0; gbc.fill = GridBagConstraints.NONE; panel.add(new JLabel(usernameLabel), gbc); gbc.gridy++; panel.add(new JLabel(passwordLabel), gbc); gbc.gridx++; gbc.gridy = 0; gbc.weightx = 1.0; gbc.fill = GridBagConstraints.BOTH; panel.add(new JTextField(20), gbc); gbc.gridy++; panel.add(new JPasswordField(20), gbc); panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); return panel; } private JPanel layoutControlPanel() { JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER)); panel.add(new JButton(ok)); panel.add(new JButton(cancel)); return panel; } private static final String dialogTitle = "xxxx 系统"; private static final String usernameLabel = "用户名: "; private static final String passwordLabel = "密码: "; private static final String ok = "确定"; private static final String cancel = "取消";} 我根本不知道JGoodies FormLayout、或 MiGLayout 是什么 最讨厌JAVA swt swing布局了,头疼建议楼主安个可视化插件吧,这样开发会方便些 估计楼主和我一样是新手,初学者,我觉的这个明显用网格布局的话应该设置Gridlayout(5,1),至于两个按钮,在一个面板中可以添加两个按钮的 java的对象的引用是指java对象在堆中的内存地址么? jsp网页怎么还有这等怪事 iReport 做关系子报表参数怎么传递 不知道哪里出错误了..... jdk 5.0 怎么没有javac命令? 关于如何得到学校个人教务信息数据的方法 谁能帮我解决一个简单的问题?? 简单问题,今天揭贴,100分! 有关线程的题目?? 我用exe4j将java变exe,再用inno安装生成安装包,安装之后,打开程序却弹出这东西,是什么原因,求解决? 求高手赐教java编写的QQ怎么加入视频聊天功能 系统异常处理
java的图形界面功能真的是太弱了,前几天我自己尝试写一个游戏界面,就找不到任何一个适合的布局。
contentPane.setLayout(null);//设置布局界面为空
Jpanel1.this.setBounds(x, y, h, w);//JPanle里存放你准备添加的组件。
x,y指的是左上角那个点相对于你Jrame界面的位置,h,w就是高和宽了。
JLabel2.this.setBounds(x, y, h, w);
contentPane.add(Jpanel1);
contentPane.add(JLabel1);
只要实现量好了坐标,用这中方式可以实现任何形式的布局。
private JLabel logintext;//添加的组件
private JLabel usernametext;
private JLabel passwordtext;
private JTextField password;
private JButton loginBtn;
private JButton registerBtn;
private JButton exitBtn;
public LoginJpaenl(JLabel errortext,JTextField username,JTextField password,JButton loginBtn,JButton registerBtn,JButton exiButton) {
this.setBounds(250, 200, 300, 200);
this.setLayout(null);
this.setBorder(BorderFactory.createLineBorder(Color.black));
this.loginBtn=loginBtn;
this.registerBtn=registerBtn;
this.exitBtn=exiButton;
logintext=new JLabel();
logintext.setBounds(130, 20, 100, 20);
logintext.setText("用户登录");
errortext.setBounds(30, 45, 200, 20);
usernametext=new JLabel();
usernametext.setBounds(20, 70, 60, 20);
usernametext.setText("账户名:");
username.setBounds(80, 70, 200, 20);
passwordtext=new JLabel();
passwordtext.setBounds(20, 110, 60, 20);
passwordtext.setText("密 码:");
password.setBounds(80, 110, 200, 20);
loginBtn.setBounds(30, 150, 60, 30);
registerBtn.setBounds(120, 150, 60, 30);
exitBtn.setBounds(210, 150, 60, 30);
this.add(logintext);
this.add(errortext);
this.add(usernametext);
this.add(username);
this.add(passwordtext);
this.add(password);
this.add(loginBtn);
this.add(registerBtn);
this.add(exitBtn);
}
}
您是专业做 Swing 的?
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;/**
*
* @date 07/11/2012
*/
public class LoginPanel extends JPanel {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() { @Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e) {
e.printStackTrace();
}
JDialog dialog = new JDialog();
dialog.setTitle(dialogTitle);
dialog.setContentPane(new LoginPanel());
dialog.pack();
dialog.setLocationRelativeTo(null);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
}
});
} public LoginPanel() {
setLayout(new BorderLayout(5, 5));
add(layoutCenterPanel(), BorderLayout.CENTER);
add(layoutControlPanel(), BorderLayout.SOUTH);
setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
}
private JPanel layoutCenterPanel() {
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.WEST; //
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.insets = new Insets(10, 10, 10, 10);
gbc.gridx = 0;
gbc.gridy = 0;
gbc.fill = GridBagConstraints.NONE;
panel.add(new JLabel(usernameLabel), gbc);
gbc.gridy++;
panel.add(new JLabel(passwordLabel), gbc);
gbc.gridx++;
gbc.gridy = 0;
gbc.weightx = 1.0;
gbc.fill = GridBagConstraints.BOTH;
panel.add(new JTextField(20), gbc);
gbc.gridy++;
panel.add(new JPasswordField(20), gbc);
panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
return panel;
}
private JPanel layoutControlPanel() {
JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
panel.add(new JButton(ok));
panel.add(new JButton(cancel));
return panel;
}
private static final String dialogTitle = "xxxx 系统";
private static final String usernameLabel = "用户名: ";
private static final String passwordLabel = "密码: ";
private static final String ok = "确定";
private static final String cancel = "取消";
}