2011-02-09 3 views
0

Gui 빌더에서 JPanel을 다시 칠하기 위해 truble을 얻을 수 있습니다. 여기GUI에서 JPanel을 다시 유효화합니다.

다음
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    // TODO add your handling code here: 
    new Main(); 
    Jpl jpl=new Jpl(); 

} 

가 손님의 구성 요소로 추가 할 클래스 사용자 지정 코드로 JPanel을 포함 클래스 A의 버튼 클릭 이벤트의 생성자 여기

public class Main { 
public static int q; 
public Main(){ 

    Random randomGenerator = new Random(); 
      for (int idx = 1; idx <= 10; ++idx) { 
       q = randomGenerator.nextInt(100); 
      } 
} 

에서 난수를 생성하는 기본 클래스입니다 A 급

public class Jpl extends JPanel { 

public Jpl() { 
    printMe(Main.q); 
} 


public int printMe(int q) { 
     removeAll(); 
    for (int i = 0; i <q; i++) { 
     System.out.println("rinting lable"); 
     String htmlLabel = "<html><font color=\"#A01070\">" + i + " New Lable </font></html>"; 
     JLabel lbl = new JLabel(htmlLabel); 
     setLayout(new GridLayout(0, 1)); 
     add(lbl, Jpl.RIGHT_ALIGNMENT); 
     lbl.setForeground(Color.BLUE); 
     Border border = BorderFactory.createLineBorder(Color.lightGray); 
     lbl.setBorder(border); 
     lbl.add(new JSeparator(SwingConstants.HORIZONTAL)); 

     lbl.addMouseListener(new MouseAdapter() { 

      @Override 
      public void mousePressed(MouseEvent e) { 
       JLabel label = (JLabel) e.getSource(); 
       JOptionPane.showMessageDialog(null, "You Slected"); 
       System.out.println(label.getText() + "NO AKKA is Selected"); 
      } 
     }); 
    } 

    revalidate(); 
    repaint(); 
    return 1; 

} 

답변

1

하나의 문제는 : 당신의 ActionListener 코드에서 새로운 JPanel의 (또는 JPL)를 만들 목적 :

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    Jpl jpl=new Jpl(); 
    int a= jpl.printMe(4); 
} 

그러나이 방법은 사용자의 GUI에 표시되는 Jpl 개체가 아닙니다. 예, 같은 클래스의 객체입니다. 그러나 표시되는 객체와 완전히 다른 새롭고 별개의 객체이므로 해당 객체의 메소드를 호출하면 표시된 Jpl 객체에는 아무런 영향을 미치지 않습니다. 해결 방법은 표시된 객체에서만 메서드를 호출하는 것입니다. 그 객체를 표시하는 나머지 코드는 공개하지 않기 때문에 객체에 대한 참조를 얻는 방법을 말할 수는 없습니다.

다른 문제는이 게시물에서 질문하지 않았기 때문에 내 제안이 기본 문제에 도움이 될지 모르겠지만 ( 문제가 해결 될 것임을 알고 있습니다). 따라서 적절한 질문을 통해 문제를 더 잘 이해하고 더 많은 코드를 게시해야 할 가능성이 높습니다.

+0

실제로 올바른 코드를 붙여 넣는 것을 잊어 버렸습니다. –

+0

"실제로 올바른 코드를 붙여 넣는 것을 잊어 버렸습니다."- 훌륭합니다. 아직 실행 가능한 질문을하지 않았습니다. 이러한 결점을 바로 잡으려면주의해야합니까? –

+0

actully이 JPanel을 다른 JPanel 클래스로 추가하려고합니다.이 값을 JPanel에 올리면이 패널을 업데이트하고 싶습니다. button을 사용할 때이 패널을 업데이트하고 싶습니다. availabel 무선 네트워크에 대한 새로 고침 버튼과 똑같이 말할 수 있습니다. 동일한 Netbeans를 사용하여 내 gui 페이지에서 구현하려고하는 것과 같습니다. –

1

내가 묻는 내용이 명확하지 않으므로 코드의 문제에 대한 의견을 게시 할 것입니다.

printMe()int을 반환하지만 항상 같은 값이므로 의미가 없습니다. 그냥 방법 void하십시오.

String htmlLabel = "New Label+ i"; 이것은 항상 동일한 문자열을 생성하며 사용자에게 i의 값을주지 않습니다. 대신 당신은 원하는 String htmlLabel = "New Label" + i;

당신은 루프에서 만들고있는 모든 일을하지 않으므로 각 객체는 현재 반복이 끝난 후에 더 이상 참조되지 않을 것입니다. 이 과정을 계속 진행하면 MouseListener이 추가되는 레이블이 GUI에 나타나지 않으므로 사용자의 MouseListener이 실행되지 않습니다.

당신은 레이블을 만드는,하지만 당신은 인 JPanel에 추가되지 않습니다

+0

실제로 - 1+ -이 코드에는 몇 가지 문제점이 있습니다. –

1

이 문제뿐만 아니라 다른 사람이 언급했다. 사용해보기 :

JLabel lbl = new JLabel(htmlLabel); 
this.add(lbl); 
+0

죄송하지만 이미 실제로 올바른 코드를 잊어 버렸습니다. 이미 add() 메서드 removeAll()이 있습니다. for (int i = 0; i "+ i + "New Lable"; JLabel lbl = 새 JLabel (htmlLabel); setLayout (새 GridLayout (0, 1)); add (lbl, Jpl.RIGHT_ALIGNMENT); lbl.setForeground (Color.BLUE); –

+1

@Qaiser : 정보 나 코드가 더 있으면 질문을 편집하십시오. 이 주석은 OP 코드에 존재하는 컨텍스트를 제공하지 않으므로 유용하지 않습니다. 형식이 지정되지 않은 경우 읽기가 어렵습니다. – unholysampler