繁体   English   中英

在JScrollPane内部的JPanel中包装JLabel

[英]Wrapping JLabels inside a JPanel thats inside a JScrollPane

我的Java有点生锈,所以请多多包涵。 我的GUI类中有一个方法,该方法调用另一个返回JList的类文件。 我正在从JList获取文本的问题,您可以在下面看到输出示例

package com.example.tests;

import java.awt.Color;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

 import javax.swing.BorderFactory;
 import javax.swing.JButton;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
 import javax.swing.JList;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JTextArea;
 import com.example.tests.IJ_runTestAFJ;
 public class GUI_v2 extends JFrame
 {  
private static final long serialVersionUID = 1L;
IJ_CommonSetup setup = new IJ_CommonSetup();


Container c;
JPanel panel;
JScrollPane userScrollPane, errorScrollPane, sysScrollPane;
JTextArea   tfUserError, tfSysError;

private JButton resetButton;
public  JList<String> errorList;


GUI_v2() 
{
    resetButton = new JButton();
    resetButton.setText("Click to populate TextArea");
    resetButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                //test.runTest_Login(stUserName,stPwd);
                updatePanel();
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    });

    panel = new JPanel();

    tfSysError = new JTextArea(10,33);
    tfSysError.setLineWrap(true);
    tfSysError.setEditable(false);
    tfSysError.setWrapStyleWord(false);
    sysScrollPane = new JScrollPane(tfSysError);
    sysScrollPane.setBorder(BorderFactory.createLineBorder(Color.black));

    panel.add(sysScrollPane);
    panel.add(resetButton);

    c = getContentPane();
    c.add(panel);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
    setSize(400,250); //width, height
    setLocation(600,0);
    setResizable(false);
    validate();     
}//close GUI

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Create and display the form */
   EventQueue.invokeLater(new Runnable() {

        public void run() {
            new GUI_v2().setVisible(true);
        }
    });
}

public void updatePanel()
{       
    errorList = new JList<String>();
    errorList = setup.getErrorJList();
    tfSysError.append(errorList.getComponent(1).toString());
    validate();
}


}// end on class

IJ_CommonSetup.java

package com.example.tests;

import javax.swing.JLabel;
import javax.swing.JList;
public class IJ_CommonSetup{
/**
 * 
 */

public static String stError = new String();
public static JList<String> stJListError = new JList<String>();


public JList<String> getErrorJList(){
    String error1 = new String("TestTestTestTestTestTestTestTestTestTestTestTestTestTest ");
    String error2 = new String("ApplesApplesApplesApplesApplesApplesApplesApplesApplesApples ");
    JLabel newError1 = new JLabel();
    newError1.setText(error1);
    JLabel newError2 = new JLabel(error2);
    stJListError.add(newError1);
    stJListError.add(newError2);
            return stJListError;
}
}

我在让标签包裹在Scrollpane内部的面板中时遇到了一些麻烦。 目前,如果添加到标签上的字符串很长,则将其向左对齐,这很好,但是标签会延伸到面板的外部,从而切断字符串的末尾。

  • JScrollPane使用JTextArea(int, int)

  • JTextArea setEditable(false)

而不是添加到JPanelJLabel (在JScrollPane

JLabel中的普通文本不会自动换行。 您可以尝试使用HTML:

String text = "<html>long text here</html";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM