我正在尝试向我的JFrame添加状态栏。我试图添加它,但它不会出现在我的JFrame上。这被称为因为JFrame与exitButton一起出现,但状态栏不在站点的位置!请帮忙!
JFrame代码:
package AnimalThing;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class window {
public static JFrame frame;
public static void create(){
frame = new JFrame("Probe Controller: Exodus I");
frame.setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1600, 900);
frame.setResizable(false);
frame.setVisible(true);
frame.setForeground(Color.CYAN);
frame.getContentPane().setBackground(Color.DARK_GRAY);
winComp.Add(frame);
}
}
winComp代码:
package AnimalThing;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.time.LocalDateTime;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class winComp {
public static JTextField statusBar;
public static JButton exitButton, clickedButton;
public static void Add(JFrame frame){
AddExitButton(frame);
AddstatusBar(frame);
}
private static void AddstatusBar(JFrame frame) {
statusBar = new JTextField(1);
statusBar.setBounds(500, 500, 100, 100);
statusBar.setText("Hello");
frame.add(statusBar);
}
public static void AddExitButton(JFrame frame){
exitButton = new JButton("Exit");
exitButton.setBounds(1, 1, 100, 33);
exitButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
System.out.println("Exit Button Hit: " + LocalDateTime.now());
System.exit(0);
}});
Font buttonFont = new Font("Thing", Font.BOLD, 16);
exitButton.setFont(buttonFont);
exitButton.setFocusPainted( false );
exitButton.setBackground(Color.BLACK);
exitButton.setForeground(Color.RED);
exitButton.setBorderPainted(false);
frame.add(exitButton);
}
}
答案 0 :(得分:2)
基本上,在添加任何组件之前,您已调用setVisible
。将frame.setResizable(false);
更改为frame.setResizable(true);
并尝试调整框架大小,字段应显示。您可以在添加字段后拨打setVisible
或致电repaint
,“可能”正常工作
我鼓励您避免使用null
布局,像素完美布局是现代ui设计中的错觉。影响组件个体大小的因素太多,您无法控制。 Swing旨在与布局管理器一起工作,放弃这些将导致问题和问题的终结,您将花费越来越多的时间来纠正
一般来说,winComp.Add(frame);
没有意义,因为您似乎正在尝试将框架添加到winComp
并且有些令人困惑。该方法的名称可以更改为其他内容,以便更容易理解方法意图。
我还建议您查看Code Conventions for the Java Programming Language因为您的代码难以阅读