2016-03-10 32 views
4

我似乎無法得到此工作。我試圖從右到左對齊列表,但它不工作,我似乎無法找到修復。爲什麼JScrollPane中的這個列表不能對齊?

這裏是我的代碼表明:

enter image description here

下面的代碼:

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.GridLayout; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 

public class Example { 

    public static void main(String[] args) { 
     JFrame jFrame = new JFrame(); 
     jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jFrame.setSize(400, 200); 
     // main panel 
     JPanel pan = new JPanel(); 
     pan.setLayout(new GridLayout(1, 2)); 
     pan.setBackground(Color.BLUE); 
     jFrame.getContentPane().add(pan, BorderLayout.CENTER); 
     jFrame.show(); 
     // left panel 
     JPanel left = getContentPanel(); 
     left.setBackground(Color.ORANGE); 
     pan.add(left); 
     // right panel (with scroll pane) 
     JPanel right = getContentPanel(); 
     right.setBackground(Color.YELLOW); 
     JScrollPane scr = new JScrollPane(right); 
     scr.setBackground(Color.CYAN); 
     scr.setAlignmentX(JScrollPane.LEFT_ALIGNMENT); 
     pan.add(scr); 
    } 

    private static JPanel getContentPanel() { 
     JPanel rtn = new JPanel(); 
     rtn.setLayout(new GridBagLayout()); 
     GridBagConstraints cs = new GridBagConstraints(); 
     cs.gridx = 0; 
     for (int i = 0; i < 100; i++) { 
      JLabel label = new JLabel("Item " + (i + 1)); 
      label.setBackground(Color.DARK_GRAY); 
      cs.gridy = i; 
      rtn.add(label, cs); 
     } 
     rtn.setBackground(Color.GREEN); 
     return rtn; 
    } 

} 
+0

'GridBagLayout'默認情況下居中。你沒有做任何事情來通過限制實際對準左邊。 –

+0

您正在將整個右側面板對齊到左側,而不是面板中的各個項目。您可以閱讀關於GridBag的[Oracle的文檔](https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html)和GridBagConstraints的默認值。 – callyalater

+0

不錯[mcve]。 1+ –

回答

3

最基本的答案是,setAlignmentX不會做你認爲它

相反,您應該使用GridBagConstraints#anchor(和GridBagConstraints#weightx約束來更改對齊方式,對於e xample ...

enter image description here

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.EventQueue; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.GridLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Example { 

    public static void main(String[] args) { 
     new Example(); 
    } 

    public Example() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame jFrame = new JFrame(); 
       jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       // main panel 
       JPanel pan = new JPanel(); 
       pan.setLayout(new GridLayout(1, 2)); 
       pan.setBackground(Color.BLUE); 
       jFrame.getContentPane().add(pan, BorderLayout.CENTER); 
       // left panel 
       JPanel left = getContentPanel(GridBagConstraints.CENTER); 
       left.setBackground(Color.ORANGE); 
       pan.add(new JScrollPane(left)); 
       // right panel (with scroll pane) 
       JPanel right = getContentPanel(GridBagConstraints.WEST); 
       right.setBackground(Color.YELLOW); 
       JScrollPane scr = new JScrollPane(right); 
       scr.setBackground(Color.CYAN); 
       scr.setAlignmentX(JScrollPane.LEFT_ALIGNMENT); 
       pan.add(scr); 

       jFrame.setSize(400, 400); 
       jFrame.setVisible(true); 
      } 
     }); 
    } 

    private static JPanel getContentPanel(int anchor) { 
     JPanel rtn = new JPanel(); 
     rtn.setLayout(new GridBagLayout()); 
     GridBagConstraints cs = new GridBagConstraints(); 
     cs.gridx = 0; 
     cs.anchor = anchor; 
     cs.weightx = 1; 
     for (int i = 0; i < 100; i++) { 
      JLabel label = new JLabel("Item " + (i + 1)); 
      label.setBackground(Color.DARK_GRAY); 
      cs.gridy = i; 
      rtn.add(label, cs); 
     } 
     rtn.setBackground(Color.GREEN); 
     return rtn; 
    } 

} 
+0

完美!添加這兩行給了我準確的東西: 'cs.weightx = 1; cs.anchor = GridBagConstraints.WEST;' – John

相關問題