2016-07-25 4 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

あなたのanwserをありがとう。あなたが表示する方法は実行可能ですが、私は多くの自己定義モジュールが必要なプロジェクトを手渡しています。このインスタンスは、私のプロジェクトで問題を単純化する単純なものです。私は自己定義モジュールを使用する必要があります。これを前提にして、それを解決する他の方法がありますか?私のプロジェクトでは、ResultSetを提供したいと思います。 – RyougiShiki

関連する問題