人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

NetBeansでGUIを作成しています。
配置したコントロールを操作するのに、別のクラスからアクセスさせています。

http://d.hatena.ne.jp/Gakuen/20090105
この様な感じです。(Javaのコードをダイアリーの載せました)

FormOperateクラスに引数としてjLabel1を渡しています。
そして、HatenaTestクラスがFormOperateクラスのインスタンスを作成し、staticなjLabelにsetTextしています。

この方法はかなり強引なやり方だと思うのですが、こんな方法でもいいものでしょうか。
もっと最適な方法があれば教えてください。

●質問者: Gakuen
●カテゴリ:コンピュータ
✍キーワード:Eクラス GUI Java NetBeans いもの
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● lunlumo
●70ポイント ベストアンサー

まず紹介されているコードは動きませんし,方向性も余りよろしくないのではないかと。元のコードの意図が良く分からないので外しているかも知れませんが,データを保持するモデルを用意してやって,データ更新時にフォーム側へ通知が届く様にしてやるのが良いのではないでしょうか。

import java.util.Observable;
import java.util.Observer;

public class Hatena extends javax.swing.JFrame implements Observer {

 LabelModel model;
 HatenaTest delegate;

 private void setModel(LabelModel newModel) { this.model = newModel; }
 private LabelModel getModel() { return this.model; }
 private void setDelegate(HatenaTest newDelegate) { this.delegate = newDelegate; }
 private HatenaTest getDelegate() { return this.delegate; }

 /** Creates new form Hatena */
 public Hatena() {
 initComponents();
 setModel(new LabelModel());
 getModel().addObserver(this);
 setDelegate(new HatenaTest(getModel()));
 }

 /** This method is called from within the constructor to
 * initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is
 * always regenerated by the Form Editor.
 */
 
 // <editor-fold defaultstate="collapsed" desc="Generated Code">
 private void initComponents() {

 jLabel1 = new javax.swing.JLabel();
 jButton1 = new javax.swing.JButton();

 setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

 jLabel1.setText("こんにちは");

 jButton1.setText("PUSH");
 jButton1.addActionListener(new java.awt.event.ActionListener() {
 public void actionPerformed(java.awt.event.ActionEvent evt) {
 jButton1ActionPerformed(evt);
 }
 });

 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
 getContentPane().setLayout(layout);
 layout.setHorizontalGroup(
 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addGap(103, 103, 103)
 .addComponent(jLabel1))
 .addGroup(layout.createSequentialGroup()
 .addGap(95, 95, 95)
 .addComponent(jButton1)))
 .addContainerGap(108, Short.MAX_VALUE))
 );
 layout.setVerticalGroup(
 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 .addGroup(layout.createSequentialGroup()
 .addGap(59, 59, 59)
 .addComponent(jLabel1)
 .addGap(51, 51, 51)
 .addComponent(jButton1)
 .addContainerGap(59, Short.MAX_VALUE))
 );

 pack();
 }// </editor-fold>

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
 getDelegate().run();
 }

 public void update(Observable o, Object arg) {
 jLabel1.setText(((LabelModel)o).getText());
 }

 /**
 * @param args the command line arguments
 */
 public static void main(String args[]) {
 java.awt.EventQueue.invokeLater(new Runnable() {
 public void run() {
 new Hatena().setVisible(true);
 }
 });
 }

 // Variables declaration - do not modify
 private javax.swing.JButton jButton1;
 private javax.swing.JLabel jLabel1;
 // End of variables declaration

}

class LabelModel extends Observable {

 private String text;

 public synchronized void setText(String newText) {
 if (!newText.equals(this.text)) {
 this.text = newText;
 setChanged();
 notifyObservers();
 }
 }

 public String getText() {
 return this.text;
 }

}

class HatenaTest {

 LabelModel model;

 private void setModel(LabelModel newModel) { this.model = newModel; }
 private LabelModel getModel() { return this.model; }

 public HatenaTest(LabelModel model) {
 setModel(model);
 }
 public void run() {
 model.setText("Hello");
 }
}

◎質問者からの返答

ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ