为什么发布是随机的?

时间:2015-06-15 13:37:56

标签: java

当我运行这个程序时,有时会向我显示所有按钮,但有时只有2或3或4或5,甚至只有1 ..为什么? 我真的不明白。应该总是有6个按钮,但它不会显示它们。有合理的原因吗?

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class testnet
{
    public static void main (String[] args)
    {
        JFrame frame = new JFrame("Knjigarna");
        frame.setVisible(true);
        frame.setSize(800,200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        frame.add(panel);

        JButton button1 = new JButton("Prikazi vse");
        panel.add(button1);
        button1.addActionListener (new Action1());

        JButton button2 = new JButton("Prikazi knjigo");
        panel.add(button2);
        button2.addActionListener (new Action2());

        JButton button3 = new JButton("Dodaj knjigo");
        panel.add(button3);
        button3.addActionListener (new Action3());

        JButton button4 = new JButton("Brisi knjigo");
        panel.add(button4);
        button4.addActionListener (new Action4());

        JButton button5 = new JButton("Uredi knjigo");
        panel.add(button5);
        button5.addActionListener (new Action5());

        JButton button6 = new JButton("Izhod");
        panel.add(button6);
        button6.addActionListener (new Action6());
    }

    static class Action1 implements ActionListener
    {
        public void actionPerformed (ActionEvent e) 
        {     
            JFrame frame2 = new JFrame("Pikaz vseh knjig");
            frame2.setVisible(true);
            frame2.setSize(500,800);
            JLabel label = new JLabel("Seznam vseh knjig:");
            JPanel panel = new JPanel();
            JTextField text1=new JTextField("Naslov: ");
            JTextField text2=new JTextField("Avtor: ");
            frame2.add(panel);
            panel.add(label);  
            panel.add(text1);
            panel.add(text2);
        }
    }

    static class Action2 implements ActionListener
    {        
        public void actionPerformed (ActionEvent e) 
        {     
            JFrame frame3 = new JFrame("Prikaz knjige");
            frame3.setVisible(true);
            frame3.setSize(600,300);

            JLabel label = new JLabel("Vpisi naslov knjige:");
            JPanel panel = new JPanel();
            frame3.add(panel);
            panel.add(label);
        }
    }
    static class Action3 implements ActionListener
    {        
        public void actionPerformed (ActionEvent e) 
        {     
            JFrame frame4 = new JFrame("Dodajanje knjige");
            frame4.setVisible(true);
            frame4.setSize(600,300);

            JLabel label = new JLabel("Vpisi podtke o knjigi");
            JPanel panel = new JPanel();
            frame4.add(panel);
            panel.add(label);
        }
    }   

    static class Action4 implements ActionListener
    {        
        public void actionPerformed (ActionEvent e) 
        {     
            JFrame frame5 = new JFrame("Brisanje knjige");
            frame5.setVisible(true);
            frame5.setSize(600,300);

            JLabel label = new JLabel("Vpisi naslov knjige, ki jo zelis brisati");
            JPanel panel = new JPanel();
            frame5.add(panel);
            panel.add(label);
        }
    }   

    static class Action5 implements ActionListener
    {        
        public void actionPerformed (ActionEvent e) 
        {     
            JFrame frame6 = new JFrame("Urejanje knjige");
            frame6.setVisible(true);
            frame6.setSize(600,300);

            JLabel label = new JLabel("Vpisi naslov knjige, ki jo zelis urejati");
            JPanel panel = new JPanel();
            frame6.add(panel);
            panel.add(label);
        }
    }   

    static class Action6 implements ActionListener
    {        
        public void actionPerformed (ActionEvent e) 
        {     
            System.exit(0);
        }
    }   
}

2 个答案:

答案 0 :(得分:0)

尝试布局。 JFrame和/或通过内容窗格删除内部管理。内容窗格默认布局为BorderLayout。所以你需要尝试边框布局的东西。 或者您可以在主要方法中尝试此代码

frame.setLayout(new FlowLayout());

这将逐个添加组件。

有关布局的更多信息,请访问here

答案 1 :(得分:0)

这只是一个修复,而不是对问题发生原因的解释。

添加所有按钮后调用frame.revalidate()

来自Java Docs

公共组件添加(组件组合)

  

这种方法   更改与布局相关的信息,因此使其无效   组件层次结构如果容器已经显示,则   之后必须验证层次结构才能显示添加的层次结构   成分