Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
3 / 1 / 0
Регистрация: 16.11.2011
Сообщений: 28
1

Взаимодействие ГУИ и оброботки

10.12.2012, 12:22. Показов 476. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день,
Пишу приложения тестовое приложение для взаимодействия с фейсбуком.
И собственно проблема в архитектуре. После прочтения статьи
У меня есть два класса, один отвечает за интерфес другой за работу с фб.
С интерфеса мне нужно передавать данные в класс для фб, а в ответ результат.
Я ни как не могу продумать, как организовать их взаимодействие, потому что функции интрейфеса должны выполняться в потоке выполнения интерфейса. И если я в нем буду вызывать класс работы с фейсбуком, то интерфейс будет висеть.
Мне нужна помощь, в том как определить поля и методы ля взаимодействие, не реализация. Вот что у меня есть на данный момент:
Java
1
2
3
4
5
6
7
8
9
10
import javax.swing.*;
 
public interface UIworkable {
     public final int INFO = 1;
     public final int ERROR_INFO = 2;
 
     void appendLog(String message);
     void showInfoMessage(String message, int type);
 
}
Java
1
2
3
4
5
6
7
public interface FBworkable {
    String accessToken ="";
    String connectToFb(String token);
    String sendMessage(String text);
    String delMessage();
 
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.ImageObserver;
 
/**
 * Created with IntelliJ IDEA.
 * User: Vitaliy
 * Date: 09.12.12
 * Time: 17:36
 * To change this template use File | Settings | File Templates.
 */
public class UI extends JFrame implements UIworkable {
    /**
     *
     */
    private static final int FRAME_WIDTH = 400;
    private static final int FRAME_HEIGHT = 400;
    private JPanel parentPanel;
    private JTextField textFieldToken;
    private JTextArea logger=null;
 
    /**
     * Конструктор для класса интерфейса
     * @param s заголовок окна
     * @throws HeadlessException
     */
 
    public UI(String s) throws HeadlessException {
        super(s);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(FRAME_WIDTH, FRAME_HEIGHT);
        setResizable(false);
        parentPanel= new JPanel();
        parentPanel.setLayout(null);
        addTokenPanel();
        addViewPanel();
        this.add(parentPanel);
    }
 
    /**
     * Метод добавления панели ввода токена
     */
    public void addTokenPanel(){
        JPanel tokenPanel = new JPanel();
        tokenPanel.setLayout(null);
        tokenPanel.setBounds(0,0,400,50);
        JLabel lbl = new JLabel("Токен безопаности");
        lbl.setBounds(150,0,200,20);
        textFieldToken = new JTextField();
        textFieldToken.setBounds(2,25,325,20);
 
        JButton button = new JButton("ok");
        button.setBounds(330,25,50,20);
        button.addActionListener(new TokenSaveAction() );
        tokenPanel.add(lbl);
        tokenPanel.add(textFieldToken);
        tokenPanel.add(button);
        parentPanel.add(tokenPanel);
    }
 
    /**
     * Метод добавления панели с логом
     */
    public void  addViewPanel(){
        JPanel viewPanel = new JPanel();
        viewPanel.setLayout(null);
        viewPanel.setBounds(1,51,400,300);
        JLabel lbl = new JLabel("Лог событий");
        lbl.setBounds(150,0,200,20);
        logger = new JTextArea();
        logger.setBounds(2,25,300,300);
        JButton button = new JButton("=>");
        button.setBounds(305,25,50,20);
        button.addActionListener(new PanelChangeAction() );
        viewPanel.add(lbl);
        viewPanel.add(logger);
        viewPanel.add(button);
        parentPanel.add(viewPanel);
    }
 
    /**
     * Метод для обрботки нажатия кнопки
     */
    private class PanelChangeAction implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            parentPanel.setVisible(false);
        }
    }
    /**
     * Метод для обрботки нажатия кнопки  принятия токена
     */
    private class TokenSaveAction implements ActionListener{
        @Override
//TODO: Добавить проверку на поток исполнения
        public void actionPerformed(ActionEvent actionEvent) {
            if(textFieldToken.getText().length()>0){
                String accessToken =textFieldToken.getText();
                JOptionPane.showMessageDialog(null,accessToken,"alright",JOptionPane.INFORMATION_MESSAGE );
            }
            else
            {
                JOptionPane.showMessageDialog(null,"error"," no anything",JOptionPane.INFORMATION_MESSAGE );
            }
        }
    }
 
    /**
     * Метод для добавления инофрмации в лог
     * @param message  Сообщение для добавления
     */
    @Override
    public void appendLog(final String message) {
        if(SwingUtilities.isEventDispatchThread()){
            logger.append(message);
        }
        else
        {
            final String m =message;
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    logger.append(m);
                }
            });
        }
 
    }
 
    /**
     * Метод для показа инфорационых сообщений или сообщений о ошибке
     * @param message
     * @param type
     */
 
    @Override
    public void showInfoMessage(String message, int type) {
        if(SwingUtilities.isEventDispatchThread()){
            switch (type){
             case INFO: JOptionPane.showInternalMessageDialog(null,message,"Информация",JOptionPane.INFORMATION_MESSAGE);
                         break;
             case ERROR_INFO: JOptionPane.showInternalMessageDialog(null,message,"Ошибка",JOptionPane.ERROR_MESSAGE);
                                break;
            }
        }
         else
        {
          final String m = message;
          final int t = type;
          SwingUtilities.invokeLater(new Runnable() {
              @Override
              public void run() {
                  switch (t){
                      case INFO: JOptionPane.showInternalMessageDialog(null,m,"Информация",JOptionPane.INFORMATION_MESSAGE);
                          break;
                      case ERROR_INFO: JOptionPane.showInternalMessageDialog(null,m,"Ошибка",JOptionPane.ERROR_MESSAGE);
                         break;
                  }
              }
          });
        }
 
 
    }
 
    public static void main(String[ ] args){
       SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
        UI ui = new UI("FB");
        ui.setVisible(true);
       }
    });
 
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import com.restfb.*;
import com.restfb.types.*;
 
public class FB implements FBworkable {
    /**
     * RestFB Graph API client.
     */
 
    private final FacebookClient facebookClient;
 
    public FB(String accessToken ) {
       facebookClient = new DefaultFacebookClient(accessToken);
    }
 
    @Override
 
    public String connectToFb(String token) {
 
        return token;
    }
 
    @Override
    public String sendMessage(String text) {
        FacebookType publishMessageResponse =
                facebookClient.publish("me/feed", FacebookType.class, Parameter.with("message", "RestFB test"));
 
       // out.println("Published message ID: " + publishMessageResponse.getId());
        return publishMessageResponse.getId();
    }
 
    @Override
    public String delMessage() {
        //To change body of implemented methods use File | Settings | File Templates.
        return null;
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.12.2012, 12:22
Ответы с готовыми решениями:

программирование алгоритмов оброботки многомерных массивов
в массиве а(n,n) включить строку номер два числом один.

QThread и гуи
Всем здравствуйте. Требуется помощь с QThread. Ситуация такая. Есть гуи-приложение, которое...

помогите с ГУИ и интерпретатором
1.Дайте мне пожалуйста исходник интерпретатора 2.Исходник ГУИ который создан не на WF А то я уже...

Графическая библиотека и гуи для С++
Привет всем,подскажите ,пожалуйста,есть ли аналоги питоновского матплотлиба и гуи ,кроме qt в...

0
10.12.2012, 12:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.12.2012, 12:22
Помогаю со студенческими работами здесь

ГУИ как посмотреть исполнение программы?
Здорова! Как сделать чтобы было удобно в mfc просматривать что выводится на экран так же как в...

Помощь при создании ГУИ-приложения
Создаю GUI-приложение для работы с базой данных (по "Создание Web-приложений с помощью C++Builder...

После обновления windows не запускаются гуи программы
После того как сегодня обновил Windows 10 то перестали работать все написанные ранее программы с...

После компиляции в py2exe запускается и гуи и командная строка
Здраствуйте, я скомпилировал прогу с помощу этой команды: C:\Python34\Scripts>build_exe.exe...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru