Java程序不';在调整大小之前,是否不显示swing元素?
谁能解释一下为什么会发生这种情况? 图片在这里,我无法上传,因为我是新用户Java程序不';在调整大小之前,是否不显示swing元素?,java,swing,Java,Swing,谁能解释一下为什么会发生这种情况? 图片在这里,我无法上传,因为我是新用户 setTitle("jNote"); pack(); setVisible(true); setLayout(new BorderLayout()); setDefaultCloseOperation(EXIT_ON_CLOSE); Image icon = Toolkit.getDefaultToolkit().getImage("jNote.png"); setIcon
setTitle("jNote");
pack();
setVisible(true);
setLayout(new BorderLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
Image icon = Toolkit.getDefaultToolkit().getImage("jNote.png");
setIconImage(icon);
通过首选尺寸设置尺寸时,必须调用
pack()
,才能应用首选尺寸。调整帧的大小也会对其进行打包,因此您可以进行观察
// component initializations
yourFrame.pack();
这就是你应该做的:
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.*;
public class JordanOsborn extends JFrame{
JPanel panel = new JPanel();
public JordanOsborn(){
super("jNote");
panel.setPreferredSize(new Dimension(400,300));
add(panel);
Image icon = Toolkit.getDefaultToolkit().getImage("jNote.png");
setIconImage(icon);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
new JordanOsborn();
}
});
}
}
通常,GUI大小可以根据内容来建议。如果在添加组件后调用,
pack()
将使GUI成为显示组件所需的最小大小
import java.awt.BorderLayout;
import javax.swing.*;
public class JNote {
public JComponent getGui(int rows, int cols) {
JPanel p = new JPanel(new BorderLayout(2,2));
p.add(new JLabel("1"), BorderLayout.LINE_START);
JTextArea ta = new JTextArea(rows, cols);
JScrollPane sp = new JScrollPane(
ta,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
p.add(sp);
p.add(
new JLabel("Rows: " + rows + " " + "Columns: " + cols),
BorderLayout.PAGE_END);
return p;
}
public static void main(String[] args) {
Runnable r = new Runnable(){
public void run() {
int cols = 20;
JNote jNote = new JNote();
for (int rows=6; rows>0; rows-=2) {
JFrame f = new JFrame("jNote " + rows + "x" + cols);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);
f.add(jNote.getGui(rows, cols));
f.pack();
f.setVisible(true);
}
}
};
SwingUtilities.invokeLater(r);
}
}
我使用了pack,它使我的窗口非常小。有什么参数需要添加吗?您还需要设置帧的首选大小。Put pack()和setVisible(true)在代码的末尾,+1是关于BorderLayout的约束条件和一个很好的例子:-),还有一个是关于使用
setLocationByPlatform()
:-)@brano88:IMHO的优点的好主意,当使用JFrame.DISPOSE ON\u CLOSE
,只需使用JFrame.EXIT\u ON\u CLOSE
,即可隐藏JFrame并使其可用于垃圾收集,这与使用System.EXIT(0)相同代码>,您正在故意强制关闭应用程序。+1谢谢,这解决了问题。我正在放背包;在我声明所有组件之前。