javagui不一致
大家好,我正在尝试为游戏创建这个菜单,当我运行代码时,它是非常随意的。在同一台电脑上,同一个屏幕,同一个操作系统,一切都一样,我可能会运行代码,菜单也很好。然后我再运行一次,发现图片不正确或者图片消失了等等。我已尝试更改contentPane.add的顺序,但我没有主意。还可能是什么?谢谢javagui不一致,java,swing,user-interface,Java,Swing,User Interface,大家好,我正在尝试为游戏创建这个菜单,当我运行代码时,它是非常随意的。在同一台电脑上,同一个屏幕,同一个操作系统,一切都一样,我可能会运行代码,菜单也很好。然后我再运行一次,发现图片不正确或者图片消失了等等。我已尝试更改contentPane.add的顺序,但我没有主意。还可能是什么?谢谢 public static int type(){ // Create a "clickable" image icon int i =0; Color c = new Colo
public static int type(){
// Create a "clickable" image icon
int i =0;
Color c = new Color (0,0,0);
ImageIcon icon = new ImageIcon("images/mike_main.png");
JLabel label = new JLabel(icon);
ImageIcon icon1 = new ImageIcon("images/igal_main.png");
JLabel label1 = new JLabel(icon1);
JPanel contentPane = new JPanel();
JLabel label3 = new JLabel("Choose your character!");
JLabel mike_l = new JLabel("Mike");
JLabel mike_info = new JLabel("<html>Speed: 10<br>Range: 7</html>");
JLabel igal_l = new JLabel("Igal");
JLabel igal_info = new JLabel("<html>Speed: 7<br>Range: 10</html>");
label3.setBounds(600,100,2000,100);
label3.setFont(new Font("Serif", Font.BOLD, 56));
label3.setForeground(Color.WHITE);
contentPane.setOpaque(true);
contentPane.setBackground(c);
contentPane.setLayout(null);
final JFrame frame = new JFrame("My Window");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(label);
frame.setTitle("The Ultimate Game");
frame.setExtendedState(frame.MAXIMIZED_BOTH);
frame.pack();
frame.setVisible(true);
label.setBounds(400,400,300,600);
mike_l.setBounds(500,330,1000,100);
mike_info.setBounds(750,500,1000,100);
//label.setLocation(50, 50);
label1.setBounds(1200,400,300,600);
igal_l.setBounds(1300,330,1000,100);
igal_info.setBounds(1550,500,1000,100);
//label1.setLocation(250, 250);
mike_l.setFont(new Font("Serif", Font.BOLD, 26));
mike_l.setForeground(Color.WHITE);
mike_info.setFont(new Font("Serif", Font.BOLD, 26));
mike_info.setForeground(Color.WHITE);
igal_l.setFont(new Font("Serif", Font.BOLD, 26));
igal_l.setForeground(Color.WHITE);
igal_info.setFont(new Font("Serif", Font.BOLD, 26));
igal_info.setForeground(Color.WHITE);
contentPane.add(label);
contentPane.add(label1);
contentPane.add(label3);
contentPane.add(mike_l);
contentPane.add(mike_info);
contentPane.add(igal_l);
contentPane.add(igal_info);
frame.setContentPane(contentPane);
label.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
System.out.println("CLICKED");
frame.setTitle("Mike");
}
});
label1.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
System.out.println("CLICKED");
frame.setTitle("Igal");
}
});
while (i==0){
//System.out.println("I am here");
String s = frame.getTitle();
System.out.println(s);
if (s.equals("Mike")){
i =1;
}
else if(s.equals("Igal")){
i = 2;
}
// Add it to a frame.
}
System.out.println("im out");
frame.setVisible(false);
return i;
}
publicstaticint-type(){
//创建一个“可点击”的图像图标
int i=0;
颜色c=新颜色(0,0,0);
ImageIcon=newImageIcon(“images/mike_main.png”);
JLabel标签=新的JLabel(图标);
ImageIcon icon1=新的ImageIcon(“images/igal_main.png”);
JLabel标签1=新的JLabel(icon1);
JPanel contentPane=新的JPanel();
JLabel label3=新的JLabel(“选择你的角色!”);
JLabel mike_l=新JLabel(“mike”);
JLabel mike_info=新JLabel(“速度:10
范围:7”);
JLabel igal_l=新JLabel(“igal”);
JLabel igal_info=新JLabel(“速度:7
范围:10”);
标签3.立根(60010020000100);
label3.setFont(新字体(“衬线”,Font.BOLD,56));
标签3.设置前景(颜色:白色);
contentPane.set不透明(true);
contentPane.挫折背景(c);
contentPane.setLayout(null);
最终JFrame=新JFrame(“我的窗口”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(标签);
frame.setTitle(“终极游戏”);
frame.setExtendedState(frame.MAXIMIZED_两者);
frame.pack();
frame.setVisible(true);
标签.立根(400300600);
mike_l.setBounds(500330100100);
mike_信息setBounds(7505001000100);
//标签。设置位置(50,50);
标签1.立根(1200400300600);
igal_l.立根(130030100100);
igal_信息立根(1550501000100);
//标签1.设置位置(250250);
mike_l.setFont(新字体(“衬线”,Font.BOLD,26));
mike_l.设置前景(颜色:白色);
mike_info.setFont(新字体(“Serif”,Font.BOLD,26));
mike_信息设置前景(颜色:白色);
igal_l.setFont(新字体(“衬线”,字体粗体,26));
igal_l.设置前景(颜色:白色);
igal_info.setFont(新字体(“Serif”,Font.BOLD,26));
igal_信息设置前景(颜色:白色);
contentPane.add(标签);
contentPane.add(标签1);
contentPane.add(label3);
contentPane.add(mike_l);
contentPane.add(mike_info);
contentPane.add(igal_l);
contentPane.add(igal_信息);
frame.setContentPane(contentPane);
label.addMouseListener(新的MouseAdapter(){
公共无效mouseClicked(MouseEvent me){
System.out.println(“单击”);
帧。设置标题(“Mike”);
}
});
标签1.addMouseListener(新的MouseAdapter(){
公共无效mouseClicked(MouseEvent me){
System.out.println(“单击”);
框架。设置标题(“Igal”);
}
});
而(i==0){
//System.out.println(“我在这里”);
字符串s=frame.getTitle();
系统输出打印项次;
如果(s.equals(“Mike”)){
i=1;
}
否则,如果(s.equals(“Igal”)){
i=2;
}
//将其添加到框架中。
}
System.out.println(“im out”);
frame.setVisible(假);
返回i;
}
我认为问题在于,在对帧进行更改之前,您正在调用frame.setVisible(true)
。如果移动此项(可能还有pack()
调用)并通过所有add()
s,然后在setContentFrame()
之后,窗口将更可靠地打开
至于对齐,这将归结为所有setBounds()
调用。如果您不需要使用setBounds()
,您可能应该查看并嵌套JPanel
s,用于您设计的模块化部分(例如字符信息)。为什么不设置布局内容窗格。setLayout(null);不要使用空布局。不要使用setBounds()。Swing设计用于布局管理器。然后,布局管理器将管理组件的大小/位置,以便它们在所有平台上看起来都很好。此外,在框架可见之前,应该将组件添加到框架中。Swing和AWT方法以及构造函数需要在AWT事件调度线程中执行。如果他们不是,你会有不可预测的行为。您在执行循环时执行,并且应用程序没有挂起,这一事实向我表明您没有使用AWT事件调度线程。实际上pack()
毫无价值,因为您的内容框架中没有LayoutManager
。使用pack()
只会在窗口未最大化时影响窗口的默认大小,因此如果您打算这样做,则应将其移动,否则应将其删除。