2013-10-18 32 views
1

我的Java有點生疏,所以請耐心等待。我在我的GUI類中調用另一個返回JList的類文件。有越來越從JList中的文本問題IM,你可以看到下面在JScrollPane內部的JPanel內部包裝JLabels

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; 
} 
} 
有一些麻煩

+2

1)爲什麼不使用'JList'代替? 2)爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。它應該不超過50 LOC(而不是> 300 LOC)。 3)'label.setPreferredSize(..'See See [我應該避免使用Java Swing中的set(Preferred | Maximum | Minimum)Size方法嗎?](http://stackoverflow.com/q/7229226/418556)(是的。) –

+0

@AndrewThompson歡呼男人,謝謝你的建議。 – CoffeeTime

回答

5

IM將標籤包裝在面板內,該面板在滾動窗格內部爲 。目前,如果添加到 標籤的字符串很長,則它會與左側對齊,但標籤 會在面板外延伸,從而切斷字符串的末尾。

  • 使用JTextArea(int, int)JScrollPane

  • setEditable(false)JTextArea

代替JLabel增補到JPanel(在JScrollPane)在JLabel d

1

普通文本沒有包裝。您可以嘗試使用HTML:

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