2017-05-12 5 views
0

최근 자바 스윙에서 분할 패널에서 의 paintComponent 기능이 함수에서 호출되지 않는다는 문제를 칠하고, 나는 분할 구획 기능을 사용할 때, 그것은 비활성화됩니다 발견 기능을 페인트 및 오류 제공 :어떻게 내가 만난

클래스 : 테스트

public class Test extends JFrame{ 

    public Test() throws IOException{ 
     //JFrame jf = new JFrame("my frame"); 
     this.add(new NewPanel(this)); 

     this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
     this.setBounds(300,200,1050,600); 
     this.setVisible (true); 

    } 

    public static void main (String[] args) throws IOException{ 

     Test test = new Test(); 
     test.setTitle("Hello"); 
      //frame.pack(); 
    } 
} 

cannot add to layout: unknown constraint: null

내가 아래에 (부분적으로) 내 코드, 페인트 기능이 올바른 방법으로 추가 할 수 없습니다 생각

클래스 : 나는 frame.add(jTabbedpane) 언급 할 때 NewPanel이

public class NewPanel extends JPanel{ 
    public NewPanel(JFrame frame) throws IOException{ 
      JTabbedPane jTabbedpane = new JTabbedPane(); 
      JSplitPane splitPane = new JSplitPane(); 
      JPanel p1    = new JPanel(); 

      p1.setLayout(null); 
      p2.setLayout(new FlowLayout()); 

      splitPane.setOneTouchExpandable(true); 
      splitPane.setContinuousLayout(true); 
      //splitPane.setPreferredSize(new Dimension (250,500)); 
      splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT); 
      splitPane.setLeftComponent(p1); 
      splitPane.setRightComponent (p2); 
      splitPane.setDividerSize(3); 
      splitPane.setDividerLocation(250); //balance two panels width 

      jTabbedpane.addTab("ABC",p2); 
      jTabbedpane.addTab("AB",p3); 
      jTabbedpane.addTab("AC",p4); 
      jTabbedpane.addTab("BC",p5); 

      frame.setContentPane(splitPane); 
      frame.add(jTabbedpane); 

      } 
    } 
    public void paintComponent(Graphics g){ 
     super.paint(g); 
     g.setColor(Color.BLUE); 
     g.drawLine(303, 90, 303, 200); 
     g.drawLine(583, 90, 583, 200); 
     g.drawLine(863, 90, 863, 200); 
    } 
} 

라인이 패널에 그려 질 수 하지만가 하나 개의 패널에서만 사용할 수 있습니다, 나는 또 다른 분할 패널로 그것을 그릴 수 없습니다, 나는 '돈 이유를 알지 못합니다. 그리고 frame.add(jTabbedpane)의 주석을 삭제하면 위에서 언급 한 오류가 발생합니다.

답변

0

UI 어셈블리가 의미가 없습니다. 「setContentPane」를 splitpane (일명 OK)이라고 부르지 만, 프레임에 add()를 호출하면 contentPane (JSplitPane)에 다른 것을 추가하려고 시도합니다. SplitPane을 JPanel에 추가하기 전에 SplitPane에 JTabbedPane을 추가하거나 레이아웃을 다르게 설정해야합니다.

//These don't make sense together. 
frame.setContentPane(splitPane); 
frame.add(jTabbedpane); 

파란색 선 그리기에 대한 두 번째 질문은 더 복잡합니다. 당신은 NewPanel을 만들고 JFrame에 그것을 추가하려하지만, 나중에 JFrame의 contentPane을 다른 구성 요소로 설정하고 있습니다. 스윙 튜토리얼을 통해 UI를보다 잘 배치해야합니다.

0

I think the paint function may not be added to the right way,

public void paintComponent(Graphics g){ 
    super.paint(g); 

당신은 paintComponent(...)을 무시하는, 그래서 당신은 왜 super.paint(...)을 요구하고있다?

스윙 기본 사항은 Swing Tutorial으로 시작하십시오. 이 자습서의 모든 섹션에는 다운로드 및 테스트 할 수있는 작동 예제가 있습니다. 그것을 어떻게 정의 회화를 수행 프레임

  • 에 분할 구획을 추가하는 방법을 보여줍니다 - - 그것은 어떻게 회화 작품과 공연을 설명합니다

    1. 분할 창] 사용 방법 :

      그래서 당신은 시작할 수 있습니다 paintComponent (...) 메소드를 오버라이드 (override)하는 방법.