2017-09-21 7 views
1
私は新しいものに私の現在のJScrollPaneのを変更したい

に別のJScrollPaneの現在にJScrollPaneを交換してください。私はボタンを押した後に変更したいと思いますし、actionPerformedメソッドが呼び出されています。 私が現在持っている問題は、アプリケーションの開始時にJscrollを塗りつぶすだけで、変更したいときには、作業量が増えることです(アプリケーションが実行されているとき)。私は何JPanelの

は次のとおりです。私は新しいJScrollPaneのを作成し、この1つは空であるアプリケーションの初めに 。ボタンが押されている場合:内容を含む別のJscrollPaneを表示します。

if(btnPressed == true){ 

//set current empty jscroll pane to a filled one. 
jscrollpane = View.createScrollPlane(); 


//View.createScrollPlane = This method fills the JscrollPane with text. 
} 
else { //show a empty one 
jscrollpane = new JscrollPane(); 

} 

私が試してみました: を - を削除 - を追加 - を再検証 - も

を再描画そして: JscrollPane.setViewPortView(JScrollPaneに);

私はCardLayoutに見てきたが、私はむしろないだろうし、それが唯一の空のコンテナをCardLayoutに変更することができますので、私にできるようにdosent。現在、GridBagLayout上にあります。事前

RE-編集中

ありがとう:作成-UI方法は、新しいものに現在の空Jscrollpanelを変更dosent。これは一度だけ(最初は)初期化されますが、Jscrollパネルは更新されます。 (私はそれをfalseに置くことを試みた)それは働いた、ブール値はtrueに変わったが、dosentはjscrollパネルを更新する。

package readDataPluginPackage; 

import com.change_vision.jude.api.inf.AstahAPI; 
import com.change_vision.jude.api.inf.project.ProjectAccessor; 
import javafx.embed.swing.JFXPanel; 

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.beans.PropertyChangeListener; 

public class Application { 
    JPanel mainJPanel; 
    private JPanel leftJPanel; 
    private JPanel rightJPanel; 
    private JButton btnSynchronise; 
    private JButton btnPreview; 
    private JScrollPane JScrollPaneReport; 
    public JScrollPane JScrollPanePreview; 
    private boolean btnPreviewClicked = false; 

    public Application() { 
     $$$setupUI$$$(); 

     btnPreview.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       btnPreviewClicked = true; 



       JOptionPane.showMessageDialog(null, "Showing..." + btnPreviewClicked); 


       // ShowXMLFileView showXMLFileView = new ShowXMLFileView(); 
       //  JScrollPanePreview = showXMLFileView.createLabelPane(); 

       // if (btnPreview.isEnabled()) { 
       // ShowXMLFileView showXMLFileView = new ShowXMLFileView(); 
       // JScrollPanePreview = showXMLFileView.createLabelPane(); 
       JOptionPane.showMessageDialog(null, "XML File Preview has been updated."); 


       createUIComponents(); 
       // JScrollPanePreview.revalidate(); 
       // JScrollPanePreview.repaint(); 
       JOptionPane.showMessageDialog(null, "Components are created again."); 

      } 


      // } 


     }); 
     btnSynchronise.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       JOptionPane.showMessageDialog(null, "Synchronising..."); 
      } 
     }); 


    } 


    public static void main(String[] args) { 
     try { 

      //Save Astah Project as XML File 
      ProjectAccessor prjAccessor = AstahAPI.getAstahAPI().getProjectAccessor(); 
      prjAccessor.open("C:\\Users\\delina\\generated\\test.asta"); 
      prjAccessor.exportXMI("C:\\Users\\delina\\generatedXMI\\temp.xml"); 
      prjAccessor.close(); 

      //Show the most recent version of the xml file of the Astah Project 
      ReadXMLFile rd = new ReadXMLFile(); 
      rd.showXMLFileLines(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 


     JFrame frame = new JFrame("Application"); 
     frame.setContentPane(new Application().mainJPanel); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    private void createUIComponents() { 
     if (btnPreviewClicked == true) { 


     // ShowXMLFileView showXMLFileView = new ShowXMLFileView(); 
      // JScrollPanePreview = showXMLFileView.createLabelPane(); 
       // JScrollPanePreview.setViewportView(JScrollPanePreview); 







      leftJPanel.remove(JScrollPanePreview); 

      ShowXMLFileView showXMLFileView = new ShowXMLFileView(); 
      JScrollPane JScrollPanePreview = showXMLFileView.createLabelPane(); 


      leftJPanel.add(JScrollPanePreview); 
     JScrollPanePreview.revalidate(); 
     JScrollPanePreview.repaint(); 







     JOptionPane.showMessageDialog(null, "JScrollPanel changed"); 
    } else { 
      JScrollPanePreview = new JScrollPane(); 
    } 


    } 


    /** 
    * Method generated by IntelliJ IDEA GUI Designer 
    * >>> IMPORTANT!! <<< 
    * DO NOT edit this method OR call it in your code! 
    * 
    * @noinspection ALL 
    */ 
    private void $$$setupUI$$$() { 
     createUIComponents(); 
     mainJPanel = new JPanel(); 
     mainJPanel.setLayout(new GridBagLayout()); 
     leftJPanel = new JPanel(); 
     leftJPanel.setLayout(new GridBagLayout()); 
     GridBagConstraints gbc; 
     gbc = new GridBagConstraints(); 
     gbc.gridx = 0; 
     gbc.gridy = 0; 
     gbc.weightx = 1.0; 
     gbc.weighty = 1.0; 
     gbc.fill = GridBagConstraints.BOTH; 
     mainJPanel.add(leftJPanel, gbc); 
     btnSynchronise = new JButton(); 
     btnSynchronise.setText("Synchronise"); 
     gbc = new GridBagConstraints(); 
     gbc.gridx = 0; 
     gbc.gridy = 2; 
     gbc.weightx = 1.0; 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     leftJPanel.add(btnSynchronise, gbc); 
     btnPreview = new JButton(); 
     btnPreview.setText("Preview"); 
     gbc = new GridBagConstraints(); 
     gbc.gridx = 0; 
     gbc.gridy = 1; 
     gbc.weightx = 1.0; 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     leftJPanel.add(btnPreview, gbc); 
     gbc = new GridBagConstraints(); 
     gbc.gridx = 0; 
     gbc.gridy = 0; 
     gbc.weightx = 1.0; 
     gbc.weighty = 1.0; 
     gbc.fill = GridBagConstraints.BOTH; 
     leftJPanel.add(JScrollPanePreview, gbc); 
     JScrollPanePreview.setBorder(BorderFactory.createTitledBorder("XML File Preview")); 
     rightJPanel = new JPanel(); 
     rightJPanel.setLayout(new GridBagLayout()); 
     gbc = new GridBagConstraints(); 
     gbc.gridx = 1; 
     gbc.gridy = 0; 
     gbc.weightx = 1.0; 
     gbc.weighty = 1.0; 
     gbc.fill = GridBagConstraints.BOTH; 
     mainJPanel.add(rightJPanel, gbc); 
     JScrollPaneReport = new JScrollPane(); 
     gbc = new GridBagConstraints(); 
     gbc.gridx = 0; 
     gbc.gridy = 0; 
     gbc.weightx = 1.0; 
     gbc.weighty = 1.0; 
     gbc.fill = GridBagConstraints.BOTH; 
     rightJPanel.add(JScrollPaneReport, gbc); 
     JScrollPaneReport.setBorder(BorderFactory.createTitledBorder("Synchronise report")); 
    } 

    /** 
    * @noinspection ALL 
    */ 
    public JComponent $$$getRootComponent$$$() { 
     return mainJPanel; 
    } 
} 


    package readDataPluginPackage; 

import com.change_vision.jude.api.inf.project.ProjectAccessor; 
import com.change_vision.jude.api.inf.project.ProjectAccessorFactory; 
import com.change_vision.jude.api.inf.project.ProjectEvent; 
import com.change_vision.jude.api.inf.project.ProjectEventListener; 
import com.change_vision.jude.api.inf.ui.IPluginExtraTabView; 
import com.change_vision.jude.api.inf.ui.ISelectionListener; 

import javax.swing.*; 
import java.awt.*; 
import java.lang.reflect.InvocationTargetException; 
import java.lang.reflect.Method; 


public class ShowUserInterface extends JPanel implements IPluginExtraTabView, ProjectEventListener { 

    public ShowUserInterface() { 
     initComponents(); 
    } 

    private void initComponents() { 
     setLayout(new BorderLayout()); 
     add(createLabelPane()); 
     addProjectEventListener(); 
    } 

    private void addProjectEventListener() { 
     try { 
      ProjectAccessor projectAccessor = ProjectAccessorFactory.getProjectAccessor(); 
      projectAccessor.addProjectEventListener(this); 
     } catch (ClassNotFoundException e) { 
      e.getMessage(); 
     } 
    } 

    private Container createLabelPane() { 
     JLabel label = new JLabel("AuguSoft Synchronise"); 
     JScrollPane pane = new JScrollPane(label); 


     Method privateMethod = null; 
     Application app = null; 
     Object o = null; 
     JComponent jComponent = null; 
     try { 
      app = new Application(); 
      privateMethod = Application.class.getDeclaredMethod("$$$setupUI$$$"); 
      privateMethod.setAccessible(true); 
      o = privateMethod.invoke(app); 
      jComponent = app.$$$getRootComponent$$$(); 



     } catch (NoSuchMethodException e) { 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
     } catch (InvocationTargetException e) { 
      e.printStackTrace(); 
     } 
     return jComponent; 
    } 





    @Override 
    public void projectChanged(ProjectEvent e) { 
    } 

    @Override 
    public void projectClosed(ProjectEvent e) { 
    } 

    @Override 
    public void projectOpened(ProjectEvent e) { 
    } 

    @Override 
    public void addSelectionListener(ISelectionListener listener) { 
    } 

    @Override 
    public Component getComponent() { 
     return this; 
    } 

    @Override 
    public String getDescription() { 
     return "Show AuguSoft Synchronise here"; 
    } 

    @Override 
    public String getTitle() { 
     return "AuguSoft View"; 
    } 

    public void activated() { 

    } 

    public void deactivated() { 

    } 
} 
+0

はありません十分な文脈では、あなたの問題私は追加 – MadProgrammer

+0

@MadProgrammerを示し、実行可能な例を提供することを検討、それはあなたが間違ってやっている何であるかを判断することができるようにしますコード、あなたの助けは非常に高く評価されるだろう:) – Hye

答えて

1

だから、他に何もしないが、あなたのコードを見て、私はあなたのcreateUIComponents方法では、あなたがJScrollPanePreviewプロパティをシャドウイングしていることに気づいた...

public class Application { 

    //...  
    public JScrollPane JScrollPanePreview; 
    //...  
    public Application() {..} 

    private void createUIComponents() { 
     if (btnPreviewClicked == true) { 
      //... 
      leftJPanel.remove(JScrollPanePreview); 

      ShowXMLFileView showXMLFileView = new ShowXMLFileView(); 
      JScrollPane JScrollPanePreview = showXMLFileView.createLabelPane(); 
      //... 
     } else { 
      JScrollPanePreview = new JScrollPane(); 
     } 

    } 

つまり、次回JScrollPanePreviewの代わりに来た場合、正しい参照を削除する必要はありません。私の心に

(と私はあなたの完全なコードベースや意図を持っていない)、私は単にほかに、私はあなたがとにかくJScrollPaneContainerを割り当てることができるかどうかはわかりません(JScrollPanePreviewビューポートを交換したいです: P)だけで観察など

private void createUIComponents() { 
     if (btnPreviewClicked == true) { 
      JScrollPanePreview.setViewportView(showXMLFileView.createLabelPane()); 
     } else { 
      JScrollPanePreview = new JScrollPane(); 
     } 

    } 

;)

+0

これは働いた!どうもありがとう! – Hye