BobLeeSwagger:
私はJavaでチャットを行うとのJPanelに古いメッセージを表示する必要があるのです。私は、それ自身の列にはそれぞれ、画像および/または送信され受信されたメッセージが表示される必要があります。私が現在持っているコード:
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel container = new JPanel();
container.setPreferredSize(new Dimension(300, 400));
// Printing five messages
for (int i = 0; i < 5; i++) {
JPanel p = new JPanel();
p.setPreferredSize(new Dimension(300, 40));
p.setBorder(BorderFactory.createLineBorder(Color.BLACK));
p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
JLabel img = new JLabel("Image : ");
JLabel txt = new JLabel("This is some text");
p.add(img);
p.add(txt);
img.setAlignmentX(Component.LEFT_ALIGNMENT);
txt.setAlignmentX(Component.LEFT_ALIGNMENT);
container.add(p);
}
f.add(container);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
今、私はそれが自動的にコンテンツにサイズを変更すべきほど良好ではない、各メッセージの幅と高さを指定しています。このための良いレイアウトマネージャがなければならないような気がしますが、私は私が使用するものを知っていないとヘルプは高く評価されるようにスイングする新しいです。
camickr:
それは自動的にコンテンツにサイズを変更する必要があります。
新しい行に折り返さテキストを持つことは、ここでの主な問題です。
一つの方法は、に次のようになります。
- 垂直ボックスを使用する - それは異なる高さを持つように各コンポーネントを可能に
- HTMLでテキストを折り返す - それはラップにテキストを可能にします
何かのようなもの:
import java.awt.*;
import javax.swing.*;
public class Chat extends JPanel
{
private Box messageBox = Box.createVerticalBox();
public Chat()
{
setLayout( new BorderLayout() );
add(messageBox, BorderLayout.PAGE_START);
addMessage("Short message");
addMessage("A longer message that should wrap as reqired onto another line. This should happen dynamically");
}
public void addMessage(String text)
{
JPanel messagePanel = new JPanel( new BorderLayout() );
JLabel label = new JLabel( new ImageIcon("about16.gif") );
messagePanel.add(label, BorderLayout.LINE_START);
JLabel message = new JLabel("<html>" + text + "</html>");
messagePanel.add(message);
messageBox.add(messagePanel);
}
private static void createAndShowGUI()
{
JFrame frame = new JFrame("Chat");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new Chat());
frame.pack();
frame.setSize(200, 100);
frame.setLocationByPlatform( true );
frame.setVisible( true );
}
public static void main(String[] args) throws Exception
{
java.awt.EventQueue.invokeLater( () -> createAndShowGUI() );
}
}