对中摆动组件
Posted
技术标签:
【中文标题】对中摆动组件【英文标题】:Centering Swing Components 【发布时间】:2014-01-16 13:38:42 【问题描述】:如何使我的文本字段和按钮居中?
编辑:用 SSCE 更新了我的帖子。希望这会有所帮助。
顺便说一句,我希望左图看起来像右图。
package pkg;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.*;
public class Game
private static JPanel panel = new JPanel();
public static JTextField username = new JTextField(20);
public static JPasswordField password = new JPasswordField(20);
JButton login = new JButton("Login");
JLabel status = new JLabel();
private static JPanel game = new JPanel();
private JButton logout = new JButton("Logout");
private static JFrame frame = new JFrame("RuneShadows");
public Game()
panel.add(username);
panel.add(password);
panel.add(login);
panel.add(status);
game.add(logout);
frame.add(panel);
frame.setSize(806, 553);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
public static void main(String[] args)
new Game();
public void loadGame()
frame.remove(panel);
frame.revalidate();
frame.add(game);
frame.revalidate();
logout.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent e)
frame.remove(game);
frame.revalidate();
frame.add(panel);
frame.revalidate();
try
Client.socketOut.writeUTF("logout");
Client.socketOut.writeUTF(Client.username);
catch (IOException e1)
e1.printStackTrace();
);
我想要的样子:
我尝试了许多不同的布局样式,但我似乎无法让它工作......
【问题讨论】:
如需尽快获得更好的帮助,请发帖 SSCCE。另见this answer.. 在你的图片中你有 2 个,你想要的那个是左边还是右边? 我希望左图看起来像右图。 上厕所How to use BoxLayout trail。注意没有调用frame.pack() 方法,你也应该看看Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing? 不要使用 frame.remove() 和 frame.add() 替换框架上的整个面板。相反,您应该使用CardLayout
。本教程为此提供了一个示例。
【参考方案1】:
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import javax.swing.*;
import javax.swing.border.*;
public class Game
private static JPanel panel = new JPanel();
public static JTextField username = new JTextField(20);
public static JPasswordField password = new JPasswordField(20);
JButton login = new JButton("Login");
JLabel status = new JLabel();
private static JPanel game = new JPanel(new FlowLayout(FlowLayout.CENTER));
private JButton logout = new JButton("Logout");
private static JFrame frame = new JFrame("RuneShadows");
public Game()
panel.setLayout(new GridLayout(0,1,15,15));
panel.setBorder(new EmptyBorder(50,100,50,100));
panel.add(username);
panel.add(password);
panel.add(status);
JPanel logoutConstrain = new JPanel(new FlowLayout(FlowLayout.CENTER));
logoutConstrain.add(logout);
panel.add(logoutConstrain);
frame.setLayout(new GridBagLayout());
frame.add(panel);
//frame.setSize(806, 553); // forget this nonsense, instead..
frame.pack(); // best!
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
public static void main(String[] args)
new Game();
public void loadGame()
frame.remove(panel);
frame.revalidate();
frame.add(game);
frame.revalidate();
logout.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent e)
frame.remove(game);
frame.revalidate();
frame.add(panel);
frame.revalidate();
);
【讨论】:
以上是关于对中摆动组件的主要内容,如果未能解决你的问题,请参考以下文章
在 JDialog 上摆动 wait() 和 notify(),对话框不显示其组件