Java函数包(),JFrame大小
我在使用function pack()时遇到了一些问题,因为我知道它应该将JFrame的大小设置为最小 这是我的杰作:Java函数包(),JFrame大小,java,jframe,jpanel,pack,Java,Jframe,Jpanel,Pack,我在使用function pack()时遇到了一些问题,因为我知道它应该将JFrame的大小设置为最小 这是我的杰作: import java.awt.*; import java.awt.event.*; import javax.swing.*; class Okno extends JFrame{ public Okno(String naslov){ setTitle(naslov); setDefault
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Okno extends JFrame{
public Okno(String naslov){
setTitle(naslov);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension d = tk.getScreenSize();
int sirina = d.width;
int visina = d.height;
setBounds(sirina/4,visina/4,sirina/2,visina/2);
}
}
public class Pretvori{
public static class Plosca extends JPanel implements ActionListener{
JTextField vnesiC , izracunajF;
protected void paintComponent(Graphics g) {
super.paintComponent(g);
vnesiC = new JTextField(8);
add(vnesiC);
add(new JLabel("\u00b0C"));
JButton pretvori = new JButton(" = ");
add(pretvori);
pretvori.addActionListener(this);
izracunajF = new JTextField(8);
izracunajF.setEditable(false);
add(izracunajF = new JTextField(8));
add(new JLabel("F"));
}
public void actionPerformed(ActionEvent e) {
String c = vnesiC.getText();
Double dc = Double.parseDouble(c);
Double df = 1.80 * dc + 32.0;
String f = String.format("%f", df);
izracunajF.setText(f);
}
}
public static void main(String[] args){
Okno okno = new Okno("Pretvornik");
okno.setLayout(new BorderLayout());
Plosca p = new Plosca();
okno.add(p);
okno.pack();
okno.setResizable(false);
okno.setVisible(true);
}
}
下载链接:
我为糟糕的语言感到抱歉。不,
pack
将框架的大小调整为其内容首选大小(基于布局管理器的要求),但由于您的Plosca
没有首选大小,它将返回0x0
,因此您的框架认为首选大小是0x0
这个
protected void paintComponent(Graphics g) {
super.paintComponent(g);
vnesiC = new JTextField(8);
add(vnesiC);
add(new JLabel("\u00b0C"));
JButton pretvori = new JButton(" = ");
add(pretvori);
pretvori.addActionListener(this);
izracunajF = new JTextField(8);
izracunajF.setEditable(false);
add(izracunajF = new JTextField(8));
add(new JLabel("F"));
}
这不是您应该如何准备UI,paintComponent
用于执行自定义绘制,而不是添加或更改UI
相反,您应该从构造函数中开始添加组件
public Plosca() {
vnesiC = new JTextField(8);
add(vnesiC);
add(new JLabel("\u00b0C"));
JButton pretvori = new JButton(" = ");
add(pretvori);
pretvori.addActionListener(this);
izracunajF = new JTextField(8);
izracunajF.setEditable(false);
add(izracunajF = new JTextField(8));
add(new JLabel("F"));
}
查看更多详细信息…否,
pack
将框架的大小调整为其内容首选大小(基于布局管理器的要求),但由于您的Plosca
没有首选大小,它返回0x0
,因此您的框架认为首选大小为0x0
这个
protected void paintComponent(Graphics g) {
super.paintComponent(g);
vnesiC = new JTextField(8);
add(vnesiC);
add(new JLabel("\u00b0C"));
JButton pretvori = new JButton(" = ");
add(pretvori);
pretvori.addActionListener(this);
izracunajF = new JTextField(8);
izracunajF.setEditable(false);
add(izracunajF = new JTextField(8));
add(new JLabel("F"));
}
这不是您应该如何准备UI,paintComponent
用于执行自定义绘制,而不是添加或更改UI
相反,您应该从构造函数中开始添加组件
public Plosca() {
vnesiC = new JTextField(8);
add(vnesiC);
add(new JLabel("\u00b0C"));
JButton pretvori = new JButton(" = ");
add(pretvori);
pretvori.addActionListener(this);
izracunajF = new JTextField(8);
izracunajF.setEditable(false);
add(izracunajF = new JTextField(8));
add(new JLabel("F"));
}
查看更多详细信息…一个大问题是,在每次调用
paintComponent
时,您都要向Plosca
实例添加组件。您应该在Plosca
构造函数中添加组件。然后,当您调用pack()
时,它将具有组件,因此其首选大小不会太小
public static class Plosca extends JPanel implements ActionListener{
JTextField vnesiC , izracunajF;
public Plosca() {
vnesiC = new JTextField(8);
add(vnesiC);
add(new JLabel("\u00b0C"));
JButton pretvori = new JButton(" = ");
add(pretvori);
pretvori.addActionListener(this);
izracunajF = new JTextField(8);
izracunajF.setEditable(false);
add(izracunajF = new JTextField(8));
add(new JLabel("F"));
}
// do not need paintComponent()
public void actionPerformed(ActionEvent e) {
. . .
}
}
一个大问题是,在每次调用
paintComponent
时,您都在向Plosca
实例添加组件。您应该在Plosca
构造函数中添加组件。然后,当您调用pack()
时,它将具有组件,因此其首选大小不会太小
public static class Plosca extends JPanel implements ActionListener{
JTextField vnesiC , izracunajF;
public Plosca() {
vnesiC = new JTextField(8);
add(vnesiC);
add(new JLabel("\u00b0C"));
JButton pretvori = new JButton(" = ");
add(pretvori);
pretvori.addActionListener(this);
izracunajF = new JTextField(8);
izracunajF.setEditable(false);
add(izracunajF = new JTextField(8));
add(new JLabel("F"));
}
// do not need paintComponent()
public void actionPerformed(ActionEvent e) {
. . .
}
}