2012-06-07 2 views

답변

5
  • 대신 EtchedBorder.Lowered의 사용 JSeparator

    ,

  • 하지만과 구분자는 기본적 전용 라인으로,하지만 당신은 재미 테두리

enter image description here

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import javax.swing.BorderFactory; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JSeparator; 
import javax.swing.SwingUtilities; 

public class NestedLayout { 

    private JFrame frame = new JFrame(); 
    private JPanel leftPanel = new JPanel(); 

    public NestedLayout() { 
     leftPanel.setLayout(new BorderLayout()); 
     leftPanel.setBorder(BorderFactory.createEmptyBorder(
       10, //top 
       10, //left 
       10, //bottom 
       10)); //right 
     leftPanel.add(new JSeparator(JSeparator.VERTICAL), BorderLayout.CENTER); 
     leftPanel.setPreferredSize(new Dimension(40, 40)); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(leftPanel, BorderLayout.WEST); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new NestedLayout(); 
      } 
     }); 
    } 
} 
+0

FlowLayout을 사용하여 JSeparator를 사용할 수 있습니까? 이것은 현재 JSeparator를 사용하여 JLabel을 상태 표시 줄에 분리하는 FlowLayout 구현과 관련되어 있습니다. http://pastebin.com/J79DsqMJ – samwell

4
을 구축 할 수 있습니다

두 패널을 결합하고 '반대'테두리에 테두리를 추가 할 수 있습니다. 각각 에칭 효과를 재현하기 :

import javax.swing.*; 
import java.awt.*; 

public class MainFrame extends JFrame { 

    public MainFrame() { 
     setLayout(new BorderLayout()); 

     JPanel left = new JPanel(); 
     left.setPreferredSize(new Dimension(200, 400)); 
     left.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 1, Color.GRAY)); 
     add(left, BorderLayout.WEST); 

     JPanel center = new JPanel(); 
     center.setPreferredSize(new Dimension(200, 400)); 
     center.setBorder(BorderFactory.createMatteBorder(0, 1, 0, 0, Color.WHITE)); 
     add(center, BorderLayout.CENTER); 

     setVisible(true); 
     pack(); 
    } 

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

enter image description here

+0

JSeparator가 FlowLayout이있는 패널에서 작동하지 않는 경우이 옵션을 사용해도됩니다. – samwell

+1

좋은 아이디어 +1 – mKorbel

2

쉽게하여 자신의 경계 클래스를 만들 수 있습니다 하위 클래스라는 EtchedBorder 또는 AbstractBorder를.

이 코드는 사용자가 물었던 것과 정확히 일치 할 것입니다 : 한면에만 그려진 EtchedBorder. 그러나 그것은 좋지 않습니다. EtchedBorder는 각면에 두 개의 선 (한 개의 어둡고 한 개의 라이트)을 그립니다. 그것은 선들이 모서리에서 만나는 방식에서 3 차원적인 모습을 얻습니다. 전체 상자가 그려지지 않으면 3 차원으로 보이지 않습니다.

setBorder(new EtchedBorder() { 
    public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { 
    g.setColor(getShadowColor(c)); 
    g.drawLine(x, y + height - 2, x, y); 

    g.setColor(getHighlightColor(c)); 
    g.drawLine(x+1, y + height - 3, x+1, y + 1); 
    } 
}); 
2

당신이 에칭 경계의 모양을 복제하는 두 가지 패널에서 '반대'를 만드는 곳 Yanflea에 의해 주어진 답변을 확장.

CompoundBorder border = BorderFactory.createCompoundBorder(
      BorderFactory.createMatteBorder(0, 0, 1, 0, Color.WHITE), 
      BorderFactory.createMatteBorder(0, 0, 1, 0, Color.GRAY) 
     ); // This would create A line on the bottom 
이런 식으로 일을의 장점은 당신은 또한 다음과 같습니다 양측이 할 수 있다는 것입니다

: (주이 그냥하다는 CompoundBorder과 같이

다음을 사용하여 하나 개의 패널을 만들 수 있습니다 구 개 패널의 격자 만 중간은보다 두꺼운 1 아래 코드를 참조하십시오, 나는 각 패널은 어디

enter image description here) 보여 패널 setBackground의 사용 국경을 가지고!

import javax.swing.*; 
import java.awt.*; 

public class Test 
{ 
    public static void main(String[] args) 
    { 
     JFrame f = new JFrame("A Demo"); 
     f.setLayout(new GridLayout(3,3)); 
     f.setSize(400,400); 
     JPanel j1 = new JPanel();  //j1.setBackground(new Color(255,0,0)); 
     JPanel j2 = new JPanel();  //j2.setBackground(new Color(200,0,0)); 
     JPanel j3 = new JPanel();  //j3.setBackground(new Color(150,0,0)); 
     JPanel j4 = new JPanel();  //j4.setBackground(new Color(100,0,0)); 
     JPanel j5 = new JPanel();  //j5.setBackground(new Color(0,255,0)); 
     JPanel j6 = new JPanel();  //j6.setBackground(new Color(0,200,0)); 
     JPanel j7 = new JPanel();  //j7.setBackground(new Color(50,0,0)); 
     JPanel j8 = new JPanel();  //j8.setBackground(new Color(0,150,0)); 
     JPanel j9 = new JPanel();  //j9.setBackground(new Color(0,100,0)); 
     j5.setBorder(BorderFactory.createCompoundBorder(
       BorderFactory.createMatteBorder(0, 0, 2, 2, Color.WHITE), 
       BorderFactory.createMatteBorder(0, 0, 2, 2, Color.GRAY) 
      )); 
     f.add(j1); 
     f.add(j2); 
     f.add(j3); 
     f.add(j4); 
     f.add(j5); 
     f.add(j6); 
     f.add(j7); 
     f.add(j8); 
     f.add(j9); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setVisible(true); 
    } 
} 
관련 문제