왼쪽 테두리에만 EtchedBorder.Lowered를 추가하려는 JPanel이 있습니다. 이것이 MatteBorders에서 가능하다는 것을 알고 있지만, EtchedBorder로이 작업을 수행 할 수있는 방법이 있는지 궁금합니다.국경의 특정면에만 EtchedBorder를 적용하려면 어떻게해야합니까?
4
A
답변
5
- 대신 EtchedBorder.Lowered의 사용 JSeparator
,
하지만과 구분자는 기본적 전용 라인으로,하지만 당신은 재미 테두리
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();
}
});
}
}
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();
}
}
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 아래 코드를 참조하십시오, 나는 각 패널은 어디
) 보여 패널 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);
}
}
관련 문제
- 1. 인쇄에 CSS를 적용하려면 어떻게해야합니까?
- 2. 기능을 완전히 적용하려면 어떻게해야합니까?
- 3. data.table에 apply를 적용하려면 어떻게해야합니까?
- 4. 국경의 원인이 수레
- 5. XML 코드에 조건을 적용하려면 어떻게해야합니까?
- 6. UIView에 불투명도 그래디언트를 적용하려면 어떻게해야합니까?
- 7. 파이썬에서 이미지에 DCT를 적용하려면 어떻게해야합니까?
- 8. WeekArchiveView에 페이지 매김을 적용하려면 어떻게해야합니까?
- 9. svg 경로에 애니메이션을 적용하려면 어떻게해야합니까?
- 10. 액션/테마에 스타일을 적용하려면 어떻게해야합니까?
- 11. 클릭시 흐름에 테두리를 적용하려면 어떻게해야합니까?
- 12. 동시에 여러 필터를 적용하려면 어떻게해야합니까?
- 13. 프로그래밍 방식으로 스타일을 적용하려면 어떻게해야합니까?
- 14. SQL 백업에 만료일을 적용하려면 어떻게해야합니까?
- 15. nHibernate에서 조부모에게 필터를 적용하려면 어떻게해야합니까?
- 16. jQuery 선택기를 다시 적용하려면 어떻게해야합니까?
- 17. 국경의 가시성을 유지하면서 CSS는 경계 중복을 피한다
- 18. 외국인 저장소에서 시각적으로 패치를 적용하려면 어떻게해야합니까?
- 19. C#을 사용하여 데이터베이스에 패치를 적용하려면 어떻게해야합니까?
- 20. 내 프로그램을 망치지 않고 wx.NO_BORDER를 적용하려면 어떻게해야합니까?
- 21. InstallShield를 사용하여 MSI에서 Windows 핫픽스를 적용하려면 어떻게해야합니까?
- 22. Ant 태스크에 시간 초과를 적용하려면 어떻게해야합니까?
- 23. Objective C의 블록에 인수 목록을 적용하려면 어떻게해야합니까?
- 24. 유형 (종류?)을 제품 유형에만 적용하려면 어떻게해야합니까?
- 25. D에서 배열의 모든 요소에 함수를 적용하려면 어떻게해야합니까?
- 26. Papervision 3D : collada 파일에 치수를 적용하려면 어떻게해야합니까?
- 27. jQueryUI를 사용하여 테이블에 테마를 적용하려면 어떻게해야합니까?
- 28. JNDI를 사용하여 Java에서 LDAP bindRequest를 적용하려면 어떻게해야합니까?
- 29. 이 JavaScript 객체에 DRY를 적용하려면 어떻게해야합니까?
- 30. 쉘 스크립트 외부에서 소스 명령을 적용하려면 어떻게해야합니까?
FlowLayout을 사용하여 JSeparator를 사용할 수 있습니까? 이것은 현재 JSeparator를 사용하여 JLabel을 상태 표시 줄에 분리하는 FlowLayout 구현과 관련되어 있습니다. http://pastebin.com/J79DsqMJ – samwell