2016-07-25 3 views
0

프로젝트를 처리 할 때 문제가 발생하면 당황합니다. 다음 코드는 추상적 인 버전입니다. 그런데, 나는 슬프다 그러나 나는 그런 식으로 ~~GUI에서 데이터를 업데이트하고 매개 변수를 전달하는 방법

주 항목 및 프레임

package com.ryougi.repaint; 

import java.awt.Color; 
import java.awt.EventQueue; 

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

public class RepaintTest { 
    public static void main(String[] args) { 
     EventQueue.invokeLater(()-> { 
      JFrame frame = new TableFrame(); 
      frame.setVisible(true); 
     }); 
    } 
} 

class TableFrame extends JFrame { 

    private JScrollPane scrollPane; 
    private JLabel label; 
    private JButton button; 
    private String data = "Old Data"; 

    public TableFrame() { 
     setTitle("TableFrame Frame"); 
     setSize(960, 540); 
     setLayout(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     initLayout(); 
    } 

    public void initLayout() { 
     button = new JButton("Add"); 
     label = new JLabel("Old Data"); 
     scrollPane = MyModule.MyScrollPane(data); 

     // Style of scrollPane 
     scrollPane.setBounds(0, 0, 960, 360); 
     scrollPane.setBackground(Color.CYAN); 

     // Style of button 
     button.setBounds(420, 400, 120, 40); 
     button.setBorder(null); 
     button.setBackground(Color.PINK); 

     // Listener of button 
     button.addMouseListener(new BtnClickListener(this)); 

     add(scrollPane); 
     add(button); 
    } 

    public JScrollPane getScrollPane() { 
     return scrollPane; 
    } 

    public void setScrollPane(JScrollPane scrollPane) { 
     this.scrollPane = scrollPane; 
    } 

    public String getData() { 
     return data; 
    } 

    public void setData(String data) { 
     this.data = data; 
    } 
} 

자체 설계 모듈

package com.ryougi.repaint; 

import javax.swing.JLabel; 
import javax.swing.JScrollPane; 

public class MyModule { 
    private static JScrollPane scrollPane; 
    private static JLabel label; 

    public static JScrollPane MyScrollPane(String data) { 
     label = new JLabel(data); 
     scrollPane = new JScrollPane(label); 
     return scrollPane; 
    } 
} 

리스너에서 처리해야

package com.ryougi.repaint; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 

import javax.swing.JFrame; 

public class BtnClickListener extends MouseAdapter { 
    private String data = "New Data"; 
    private JFrame frame; 

    public BtnClickListener(JFrame frame) { 
     this.frame = frame; 
    } 

    @Override 
    public void mouseClicked(MouseEvent e) { 
     super.mouseClicked(e); 
     // ((TableFrame) frame).setData(data); 
     ((TableFrame) frame).setScrollPane(MyModule.MyScrollPane(data)); 
     ((TableFrame) frame).getScrollPane().repaint(); 
    } 
} 

scrollPanel을 다시 칠해 label에있는 텍스트 표시를 새로 고치려면 Old Data에서 New Data까지를 의미합니다. 하지만 전화로 변경하지 못했습니다.

((TableFrame) frame).setScrollPane(MyModule.MyScrollPane(data)); 
((TableFrame) frame).getScrollPane().repaint(); 

아무도 나에게 조언을 해줄 수 있습니까? 고맙습니다. 내 목적을 달성하려면 어떻게해야합니까?

답변

0
public void setScrollPane(JScrollPane scrollPane) { 
    this.scrollPane = scrollPane; 
} 

이렇게하면 scrollPane 속성이 지정된 scrollPane으로 설정됩니다. JFrame과 더 이상 관련이 없다는 점을 제외하고는 위대합니다.

처음에는 실제로 scrollPane을 JFrame에 추가했습니다. 그러나 결코 그것을 제거하고 새로운 것으로 교환하지 마십시오. 속성에서 참조하는 scrollPane 만 변경하면됩니다. 다시 그리는 것은 재미 있을지 모르지만 새 scrollPane이 JFrame에 추가되지 않아 표시되지 않기 때문에 표시되지 않습니다.

편집 : 당신은 당신이 정말로 원하는 모든 당신의 TableFrame 클래스에 다음 메서드를 추가 ... 레이블 텍스트를 변경 당신이 그것을 프로그래밍 방식으로 당신의 인생이 너무 복잡하고 있습니다 :

public void updateLabelText(String newText) { 
    label.setText(newText); 
    label.repaint(); 
} 

... 그럼 당신은 당신의 MouseListener에서

((TableFrame) frame).updateLabelText(data); 

를 호출 할 수 있습니다 당신은 심지어 모든 인 MyModule 클래스를 필요가 없습니다

난 당신의 주요 문제는 당신이 참조와 실제 개체의 차이를 이해하지 않는다고 생각합니다.

+0

감사합니다. 내 목적을 달성하기 위해 무엇을해야합니까? – RyougiShiki

+0

지금 기술적 인 문제가 있습니다. 그러나 제 대답을 업데이트하는 중입니다. 잠시만 기다려주십시오. D – Mark

+0

감사합니다. 당신이 보여줄 수있는 방법은 실행 가능하지만, 프로젝트에 많은 셀프 정의 모듈이 필요합니다. 이 인스턴스는 프로젝트에서 문제를 단순화 한 간단한 인스턴스입니다. 자체 정의 모듈을 사용해야합니다. 이를 전제 조건으로 삼는 다른 방법이 있을까요? 내 프로젝트에서 나는 ResultSet을 전달하고자한다. – RyougiShiki

관련 문제