Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java函数包(),JFrame大小_Java_Jframe_Jpanel_Pack - Fatal编程技术网

Java函数包(),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

我在使用function pack()时遇到了一些问题,因为我知道它应该将JFrame的大小设置为最小

这是我的杰作:

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) {
        . . .
    }
}