将图片添加到SUPER并关闭旧窗口以打开新的

时间:2012-01-08 17:45:28

标签: java swing

我搜索谷歌回答我的问题并找到它,但我不知道如何使用它。 Q1。如何将图片添加到我的程序和文本中。 Q2。当我打开新的时候我怎么能关闭旧窗户(我读到关于dispole和setVisiable,但我不能这样做)。 我的计划:

public class Main extends JFrame implements ActionListener {

    public static void main (String[] args){
        new Main().setVisible(true);

    }

    private static String[] args; // OTWORZ inny program
    private Main(){

        super("PROJEKT"); // tytuł okna
        setSize(600,600); // rozmiar okna
        setResizable(false); // blokuj powiększenie manualne okna
        setDefaultCloseOperation(EXIT_ON_CLOSE); // na krzyzuku zamknie

        Toolkit zestaw = Toolkit.getDefaultToolkit(); // get defaulttoolkit , zestaw który pobierze
        Dimension rozmiarEkranu = zestaw.getScreenSize(); // rozdzielczosc ekranu a nastepnie 
        int wysEkranu = rozmiarEkranu.height;           // wstawi otworzy okno na środku
        int szerEkranu = rozmiarEkranu.width;

        // umiesc ramke na srodku ekranu i dodaj tytuł

        setSize(szerEkranu / 2, wysEkranu / 2);
        setLocation(szerEkranu / 4, wysEkranu / 4);

        setLayout (new BorderLayout());
        /*
         * FlowLayout
         * GridBagLayout
         * GridLayout
         * BorderLayout
         */

        JButton klawisz = new JButton ("START");
        klawisz.addActionListener (new Action1());
        add(klawisz, BorderLayout.SOUTH);

        JMenuBar bar = new JMenuBar(); // Górne MENU
        JMenu file = new JMenu("Plik"); // wstaw PLIK do menu
        JMenuItem close = new JMenuItem("Zamknij"); // do pliku wstaw zamknij
        close.addActionListener(this);
        file.addSeparator(); // wstaw przerwe
        file.add(close);

        bar.add(file);
        setJMenuBar (bar);


    }
    static class Action1 implements ActionListener{
    public void actionPerformed(ActionEvent e) {

        Menu.main(args); // otwiera inny program
        new Main().setVisible(false); // HERE I DONT KNOW HOW TO CLOSE OLD WINDOW
    }


    }
    @Override
    public void actionPerformed(ActionEvent e) {
        String name = e.getActionCommand();

        if(name.equals("Zamknij")) { // zamknij program jak wcisne przycisk zamknij
            System.exit(0);

        }

    }
}

2 个答案:

答案 0 :(得分:2)

1)不要为新映像创建新的JFrame,不要这样做,那些containers存在于内存中,直到当前的JVM实例存在

2)看CardLayout,然后你就不需要类似的东西了

答案 1 :(得分:2)

您的问题是您在Main类的新实例上调用setVisible(false),并且此实例不是当前正在显示的实例。要回答您的直接问题,您需要在Main的当前实例上调用setVisible(false),然后使用Main.this:

Main.this.setVisible(false);

但是说了这句话,我和mKorbel(1+给他),你甚至不应该这样做,因为它会带来丑陋的用户体验,而是应该交换 view < / em>使用CardLayout。