2017-12-13 17 views
2

그래서 Netbeans에서 자바 드래그 앤 드롭으로 메신저 종류의 앱을 만들려고합니다. 나는 상당히 새로운 편이다. 처음에는 텍스트 영역에서 문자열을 가져 와서 다른 패널의 JLabel에 표시하려고합니다. 나는 다음 과정에서 그것을 시도했다. 그러나 그것은 효과가 없었다. 누군가 도와 줄 수 있습니까?Java를 사용하는 메신저 앱을위한 동적 JLabels 만들기

private void sendButtonActionPerformed(java.awt.event.ActionEvent evt) {             
    int i=0; 
    message = messageType.getText(); 
    JLabel messageLabel = new JLabel(); 
    messageLabel.setText(message); 
    messageLabel.setSize(100, 100); 
    messageLabel.setAlignmentX(0); 
    messageLabel.setAlignmentY(0); 
    JOptionPane.showMessageDialog(null, message); 
    clientPanel.add(messageLabel); 
    messageLabel.setVisible(true); 
}  

답변

1

우리는 레이아웃 매니저 clientPanel이 사용하고 그래서 JLabel의가, 그것으로 삭제되는 것을 받아 들일 것입니다 얼마나 잘 모르는 무슨 생각이 직접적인 질문은 당신이 항상해야 말을하는 것보다 다른, 대답 할 수없는 것입니다 물었다 정도로 구성 요소를 추가 또는 제거한 후 컨테이너 (clientPanel)에 revalidate()을 호출 한 다음 repaint()을 호출하여 컨테이너가 해당 구성 요소를 다시 레이아웃 한 다음 다시 그립니다.

이에 대한 새로운 JLabel을 작성하지 않는 것이 좋습니다. 처음부터 필요한 모든 JLabel을 포함하여 GUI를 설정하는 것이 훨씬 쉬우 며 필요한 경우 텍스트와 빈 공간을 제공 한 다음 프로그램이 진행되는 동안 기존 JLabel의 텍스트를 설정합니다.

한편, cientPanel에 여러 메시지를 표시하려면 JList<String> 또는 초점을 잡지 수없는 JTextArea를 사용하는 것이 좋습니다.

+0

의견을 보내 주셔서 감사합니다. 내가 언급 한 기능을 호출했으며 현재 작동 중입니다. 더 큰 메시지를 보내려고하면 무슨 일이 생길지 생각하고 있는데 라벨에 넣으려고하면 작동하지 않아야합니다. 그래서 JTextArea가 거기에서 작동 할 것입니다. 방금 레이블에 대한 제안을 시도해 보았습니다. JTextAreas에서도 사용할 수 있기를 바랍니다. – TheNoob

+0

@TheNoob : JTextArea의 경우 'setFocusable (false) '을 호출하여 초점을 맞추지 않아야 사용자가 편집 할 수 있습니다. 또한 끝에 텍스트를 추가하려면'.append (String text)'를 호출하는 것을 고려하십시오. 자동으로 텍스트를 감싸려는 경우에도이 방법을 사용할 수 있습니다. –

+0

지금 TextArea를 사용하려고하는데 setEditable()을 false로 사용했습니다. 또한 setBounds 메서드를 setAllignmentX() 및 setAllignmentY()의 두 가지 다른 메서드로 대체했지만 JTextArea가 내 화면에 표시되지 않습니다. 텍스트를 감싸기 위해 setText() 메서드를 사용했습니다. – TheNoob