Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用HTML标记和对齐问题的多行JLabel_Java_Swing_Jlabel_Layout Manager_Boxlayout - Fatal编程技术网

Java 使用HTML标记和对齐问题的多行JLabel

Java 使用HTML标记和对齐问题的多行JLabel,java,swing,jlabel,layout-manager,boxlayout,Java,Swing,Jlabel,Layout Manager,Boxlayout,我在JSsrollPane中有jlabel,它们向右对齐。我希望标签是多行的,所以我添加了helloworld。现在的问题是标签不再向右对齐,而是填充整个布局 没有html标记时的外观 html标记的外观 MRE: import javax.swing.*; 导入javax.swing.border.EmptyBorder; 导入java.awt.*; 导入java.awt.event.WindowEvent; 公共类测试扩展了JPanel{ 静态JScrollPane scroll_are

我在
JSsrollPane
中有
jlabel
,它们向右对齐。我希望标签是多行的,所以我添加了
hello
world
。现在的问题是标签不再向右对齐,而是填充整个布局

没有html标记时的外观

html标记的外观

MRE:

import javax.swing.*;
导入javax.swing.border.EmptyBorder;
导入java.awt.*;
导入java.awt.event.WindowEvent;
公共类测试扩展了JPanel{
静态JScrollPane scroll_area=新建JScrollPane();
静态JPanel面板=新JPanel();
静态JButton btn=新JButton(“添加”);
专用静态最终颜色lbl_颜色=新颜色(171171171);
私有静态最终清空顺序lbl_padding=新的清空顺序(10,10,10,10);
测试(){
setLayout(新的BoxLayout(这是BoxLayout.Y_轴));
panel.setLayout(新的BoxLayout(panel,BoxLayout.Y_轴));
滚动_area.getViewport().add(面板);
滚动_区域。创建垂直滚动条();
scroll_area.createHorizontalScrollBar();
添加(滚动显示区域);
添加(btn);
addActionListener(e->addText());
设置大小(300,30);
}
公共静态void addText(){
String text=“你好,世界
欢迎来到地球”; //String text=“你好,欢迎来到地球”; JLabel mess_lbl=新的JLabel(文本,JLabel.RIGHT); mess_lbl.setOpaque(真); 混乱的背景(背景颜色); 部件右对齐; 面板。添加(菜单栏); panel.add(Box.createRigidArea)(新维度(0,5)); panel.updateUI(); } 公共静态void main(字符串[]args){ JFrame=新JFrame(); frame.dispatchEvent(新的WindowEvent(frame,WindowEvent.WINDOW_关闭)); frame.add(新测试()); 框架。设置尺寸(500300); frame.setVisible(true); } }

我希望我的多行标签位于布局的右侧,如图1所示。

我对
BoxLayout
没有太多经验,因此您可能希望等待,看看其他人是否有任何想法或建议。但只需一点点努力,我就可以使用
GridBagLayout
来实现它

导入java.awt.Color;
导入java.awt.Component;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.awt.Insets;
导入java.awt.event.WindowEvent;
导入javax.swing.BoxLayout;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.border.EmptyBorder;
公共类测试扩展了JPanel{
静态JScrollPane scroll_area=新建JScrollPane();
静态JPanel面板=新JPanel();
静态JButton btn=新JButton(“添加”);
专用静态最终颜色lbl_颜色=新颜色(171171171);
private static final EmptyBorder lbl_padding=新的EmptyBorder(10,10,10,10);
private JPanel filler=new JPanel();
测试(){
setLayout(新的BoxLayout(这是BoxLayout.Y_轴));
panel.setLayout(新的GridBagLayout());
GridBagConstraints gbc=新的GridBagConstraints();
gbc.gridwidth=GridBagConstraints.rements;
gbc.insets=新的insets(4,0,4,0);
gbc.weighty=1;
面板。添加(填料,gbc);
滚动_area.getViewport().add(面板);
滚动_区域。创建垂直滚动条();
scroll_area.createHorizontalScrollBar();
添加(滚动显示区域);
添加(btn);
addActionListener(e->addText());
设置大小(300,30);
}
专用int计数器;
public void addText(){
计数器+=1;
String text=“你好,世界
欢迎来到地球”+计数器+”; //String text=“你好,欢迎来到地球”; GridBagConstraints gbc=新的GridBagConstraints(); gbc.gridwidth=GridBagConstraints.rements; gbc.anchor=gridbag.EAST; gbc.weightx=1.0; gbc.insets=新的insets(4,0,4,0); JLabel mess_lbl=新的JLabel(文本,JLabel.RIGHT); mess_lbl.setOpaque(真); 混乱的背景(背景颜色); 部件右对齐; panel.add(mess_lbl,gbc,panel.getComponentCount()-1); //panel.add(Box.createRigidArea)(新维度(0,5)); panel.revalidate(); panel.repaint(); } 公共静态void main(字符串[]args){ JFrame=新JFrame(); frame.dispatchEvent(新的WindowEvent(frame,WindowEvent.WINDOW_关闭)); frame.add(新测试()); 框架。设置尺寸(500300); frame.setVisible(true); } }
我对
BoxLayout
没有太多经验,所以您可能需要等待,看看其他人是否有任何想法或建议。但只需一点点努力,我就可以使用
GridBagLayout
来实现它

导入java.awt.Color;
导入java.awt.Component;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.awt.Insets;
导入java.awt.event.WindowEvent;
导入javax.swing.BoxLayout;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.border.EmptyBorder;
公共类测试扩展了JPanel{
静态JScrollPane scroll_area=新建JScrollPane();
静态JPanel面板=新JPanel();
静态JButton btn=新JButton(“添加”);
专用静态最终颜色lbl_颜色=新颜色(171171171);
private static final EmptyBorder lbl_padding=新的EmptyBorder(10,10,10,10);
private JPanel filler=new JPanel();
测试(){
setLayout(新的BoxLayout(这是BoxLayout.Y_轴));
panel.setLayout(新的GridBagLayout());
GRIDBAG约束gbc=新Gri
import java.awt.Color;
import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.WindowEvent;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;

public class Test extends JPanel {

    static JScrollPane scroll_area = new JScrollPane();
    static JPanel panel = new JPanel();
    static JButton btn = new JButton("Add");

    private static final Color lbl_color = new Color(171, 171, 171);
    private static final EmptyBorder lbl_padding = new EmptyBorder(10, 10, 10, 10);

    private JPanel filler = new JPanel();

    Test() {
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

        panel.setLayout(new GridBagLayout());

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        gbc.insets = new Insets(4, 0, 4, 0);
        gbc.weighty = 1;

        panel.add(filler, gbc);

        scroll_area.getViewport().add(panel);
        scroll_area.createVerticalScrollBar();
        scroll_area.createHorizontalScrollBar();

        add(scroll_area);
        add(btn);

        btn.addActionListener(e -> addText());

        setSize(300, 30);

    }

    private int counter;

    public void addText() {
        counter += 1;
        String text = "<html><font color='#F9F6F6'>Hello world <br> Welcome to Earth " + counter + "</font></html>";
//        String text = "Hello world Welcome to Earth";

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        gbc.anchor = GridBagConstraints.EAST;
        gbc.weightx = 1.0;
        gbc.insets = new Insets(4, 0, 4, 0);

        JLabel mess_lbl = new JLabel(text, JLabel.RIGHT);

        mess_lbl.setOpaque(true);
        mess_lbl.setBackground(lbl_color);
        mess_lbl.setAlignmentX(Component.RIGHT_ALIGNMENT);

        panel.add(mess_lbl, gbc, panel.getComponentCount() - 1);

        //panel.add(Box.createRigidArea(new Dimension(0, 5)));
        panel.revalidate();
        panel.repaint();
    }

    public static void main(String[] args) {

        JFrame frame = new JFrame();
        frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
        frame.add(new Test());
        frame.setSize(500, 300);
        frame.setVisible(true);

    }

}