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


Автор: inohodec 5.10.2005, 21:30
Здравствуйте smile

Написал программку обмена сообщениями (типа ICQ) , но столнулся с проблемой

Окно в котором появляются сообщения не "поднимается" по мере их поступления . т.е. что бы прочитать новые надо делать скролинг smile

Подскажите как заставить его следить за последней строкой и держать ее всегда в видимой части окна
Спасибо smile

Автор: LSD 5.10.2005, 21:52
Или JTextArea.moveCaretPosition(int) или JScrollPane.setViewport(JViewport), второй вариант сложнее, но универсальней.

Автор: inohodec 5.10.2005, 23:16
Спасибо , сделал smile

Автор: JulT 6.10.2005, 09:22
Цитата(LSD @ 5.10.2005, 21:52)
Или JTextArea.moveCaretPosition(int) или JScrollPane.setViewport(JViewport), второй вариант сложнее, но универсальней.

при помощи чего делал, я имею ввиду Timer,JMS или еще че-нибудь
Добавлено @ 09:30
я извиняюсь не того процетировала

Автор: inohodec 6.10.2005, 11:41
Цитата(JulT @ 6.10.2005, 09:22)
при помощи чего делал, я имею ввиду Timer,JMS или еще че-нибудь

Код

AreaView = new JViewport();
AreaView.setView(result);//result = new JTextArea(3, 50);
scrollPane.setViewport(AreaView);

public void scrollPanel() 
{
     AreaView.setViewPosition(new Point(0, AreaView.getViewSize().height - 
     AreaView.getExtentSize().height));
}

Автор: JulT 6.10.2005, 12:00
где ты сообщения хранишь,при помощи чего передаешь

Автор: inohodec 6.10.2005, 14:02
Вот кусочки кода , если есть вопросы , пожалуйста smile
Не даю весь код потому как ето 900 строк , чат всего лишь маленькое добавление к программе

Код

result = new JTextArea(3, 50);

result.setCaretPosition(result.getDocument().getLength());
      result.setEditable(false);
      result.setAlignmentX(Component.LEFT_ALIGNMENT);
      result.setBackground(Color.lightGray);
      result.setForeground(new Color(0, 0, 204));
      result.setBorder(new TitledBorder(new EtchedBorder(),
         "Dialog"));

JScrollPane scrollPane = new JScrollPane(result, 
    ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, 
    ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); // 0,6
    
AreaView  = new JViewport();
        AreaView.setView(result);
        scrollPane.setViewport(AreaView);
//...
//---------------------------
connect = new JButton("Send"); 
connect.setMnemonic('S');
connect.addActionListener(this);
//...
//------------------------------------
inputArea = new JTextArea(3, 50);
      inputArea.setAlignmentX(Component.LEFT_ALIGNMENT);
      inputArea.setBackground(Color.lightGray);
      inputArea.setForeground(new Color(204,0,0));
      inputArea.setBorder(new TitledBorder(new EtchedBorder(),
         "Enter your message")); 

scrollPane = new JScrollPane(inputArea, 
    ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, 
    ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); // 0,7
//...
//---------------------------------
  public class BroadcastHandler extends Thread
  {
    BufferedReader broadcastReader;

    public BroadcastHandler()
    {
      try {
        broadcastReader = new BufferedReader(
          new InputStreamReader(server.getInputStream()));
      }
      catch (IOException e){;}//scrollPanel();
    }
    public void run()
    {
      String line;
      try{
        while ((line=broadcastReader.readLine())!= null)
        { 
          result.append(line+"\n");
        }
      }
      catch (IOException e) {;}//scrollPanel();
    }      
  }
//----------------------------
public void  ChatFrame(String host)
   {
      try
      {
          server = new Socket(host,5454);
          pw = new PrintWriter(server.getOutputStream(), true);
      }
      catch(IOException e) 
      { 
          System.out.println("problem connecting to server"); 
      } 
  }   
//----------------------------
public void actionPerformed(ActionEvent evt)
{
    pw.println(inputArea.getText());
    inputArea.setText("");      
    scrollPanel();
}

Автор: batigoal 6.10.2005, 14:12
М
 
JulT
Такие вопросы лучше задавать в отдельном топике, т.к. они к сабжу не относятся.

Автор: JulT 6.10.2005, 15:04
сорри smile

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