Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Ещё раз о Preferences


Автор: alex09 5.2.2006, 20:54
Привет всем,
у меня очередной вопрос:
Можно ли в этом примере сделать так, чтобы при нажатии кнопи "Cancel" происходила запись актуального состояния Frame в registry?

Код

import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.util.prefs.Preferences;



public class view {

    Preferences root = Preferences.userRoot();
    Preferences node;
    JFrame frame;



  public view(String FrameName) {
        super();

        frame = new JFrame();
        frame.setName(FrameName);
        frame.setTitle(FrameName);
        getPref(frame);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(new JScrollPane(Panel()));
        frame.setVisible(true);

    }

    JPanel Panel() {
      JPanel panel;
        panel = new JPanel();
        panel.setLayout(new FlowLayout(FlowLayout.LEFT,10,10));
        JButton but = new JButton("CLOSE");
        but.addActionListener(getButtonCancel());
        panel.add(but);
        return panel;

    }

public void getPref(final JFrame frame){


    String CurFrame = frame.getName();
    node = root.node("testen/preferences/"+ CurFrame);

    int left = node.getInt("left", 0);
    int top = node.getInt("top", 0);
    int width = node.getInt("width", 400);
    int height = node.getInt("height", 300);

    frame.setBounds(left, top, width, height);

    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
               node.putInt("left", frame.getX());
               node.putInt("top", frame.getY());
               node.putInt("width", frame.getWidth());
               node.putInt("height", frame.getHeight());
      }
    });

}



    public ActionListener getButtonCancel() {
        return new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        };

    }



}



Автор: LSD 5.2.2006, 21:54
А в чем трудность, у тебя же весь нужный код уже есть? В обработчике нажатия кнопки Cancel пишешь тот же код, что и в WindowListener-е. Только перед выходом рекомендую сделать node.flush().

Автор: alex09 5.2.2006, 22:42
Спасибо за быстрый ответ, LSD
Пробовал всё возможное, всё равно не получается, может покажешь на примере?
Буду очень благодарен!

Автор: LSD 5.2.2006, 23:01
Измени метод getButtonCancel() на:
Код
  public ActionListener getButtonCancel()
  {
    return new ActionListener()
    {
      public void actionPerformed(ActionEvent e)
      {
        node.putInt("left", frame.getX());
        node.putInt("top", frame.getY());
        node.putInt("width", frame.getWidth());
        node.putInt("height", frame.getHeight());
        try
        {
          node.flush();
        }
        catch(BackingStoreException e1)
        {}
        System.exit(0);
      }
    };
  }

Автор: alex09 5.2.2006, 23:09
Бальшое спасибо!

smile

Автор: LSD 5.2.2006, 23:11
Пожалуйста smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)